home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1995 April / Internet Tools.iso / dos_win / winsock / wsock20 / archive / text0000.txt < prev   
Encoding:
Text File  |  1994-05-03  |  135.3 KB  |  3,490 lines

  1. Thus expounded Distinct TCP/IP on Oct 25,10:22pm:
  2. /--------------------
  3. |Hi!
  4. |
  5. |The WINSOCK spec says that gethostname() returns a name that is 
  6. |"guaranteed" to be successfully parsed by gethostbyname(). This
  7. |effectively means that gethostname() cannot return an internet
  8. |address in the formatt "a.b.c.d", because these are not parsed by 
  9. |gethostbyname().
  10. |
  11. |If a machine is getting its local IP address from RARP, BOOTP
  12. |or PPP, it only has a valid IP address and no name associated
  13. |with it. So in these case what should gethostname() return?
  14. |It cannot return the IP address and somehow returning an error
  15. |code does not seem to be the correct option. If it has to return an 
  16. |error, what error code should it return?????
  17.  
  18. There is a broader issue - what if the stack is configured with a 
  19. name, but that name is not in the stacks host table or the DNS - in that
  20. case, normal processing would NOT resolve the name into an IP number.
  21.  
  22. This gethostname() is usually used to find the stack's IP number,
  23. by calling gethostbyname() on the string returned by gethostname().
  24.  
  25. My feeling is the stack should provide some sort of dummy name if there 
  26. is not one coded, and the gethostbyname/WSAgetHostByName should explicitly
  27. check for this string and return the local IP number, without going
  28. through the normal resolving process. That way, if RARP/BOOTP/etc is
  29. used to configure the IP number and there is no host name, gethostname
  30. should return "localhost" or something that only need be meaningful
  31. to the stack without recourse to the DNS or hosts file.
  32.  
  33. Its a good question, that needs further clarification in the next
  34. spec..
  35.  
  36. |    vikas
  37. |
  38. |==========================================================
  39. |Vikas Garg                   Phone : (408) 741-0781         
  40. |Distinct Corp.               Fax   : (408) 741-0795         
  41. |14395 Saratoga Av.           E-Mail: vikas@distinct.com     
  42. |Saratoga, CA 95070                                          
  43. |U.S.A.                                                      
  44. |==========================================================
  45. |
  46. \--------------------- {end}
  47.  
  48.  
  49. -- 
  50. Paul Brooks              |paul@abccomp.oz.au       |Emerging Standard:
  51. TurboSoft Pty Ltd        |pwb@newt.phys.unsw.edu.au|  one that has not yet
  52. 579 Harris St., Ultimo   |                         |  been superseded.
  53. Sydney Australia 2007    |ph: +61 2 281 3155       |  
  54. ????
  55. ????
  56. From gabor.inference.com!inference.com!gloster Thu Jan 27 13:46:00 1994
  57. Date: Thu, 27 Jan 94 13:50:20 PST
  58. From: "Vance M. Gloster" <gloster@inference.com>
  59. Message-Id: <9401272150.AA09238@quaestor>
  60. To: martinh@jsbus.com
  61. Subject: Windows Sockets 2 Contribution
  62. content-length: 137
  63. Status: OR
  64.  
  65. UDP sockets
  66.  
  67. Adding a standard interface to UDP sockets so that a standard Ping
  68. could be created.
  69.  
  70. -Vance Gloster
  71.  gloster@inference.com
  72. ????
  73. ????
  74. From gabor.inference.com!inference.com!gloster Thu Jan 27 13:48:34 1994
  75. Date: Thu, 27 Jan 94 13:53:00 PST
  76. From: "Vance M. Gloster" <gloster@inference.com>
  77. Message-Id: <9401272153.AA09283@quaestor>
  78. To: martinh@jsbus.com
  79. Subject: Windows Sockets 2 Contribution
  80. content-length: 231
  81. Status: OR
  82.  
  83. BOOTP support
  84.  
  85. Explicit support for BOOTP which allows dialup connections to set
  86. their IP address dynamically at connection time.  A standard interface
  87. for this should be explicitly required.
  88.  
  89. -Vance Gloster
  90.  gloster@inference.com
  91. ????
  92. ????
  93. From gabor.inference.com!inference.com!gloster Thu Jan 27 14:33:48 1994
  94. Date: Thu, 27 Jan 94 14:39:21 PST
  95. From: "Vance M. Gloster" <gloster@inference.com>
  96. Message-Id: <9401272239.AA11350@quaestor>
  97. To: martinh@jsbus.com
  98. Subject: Windows Sockets 2 Contribution
  99. content-length: 379
  100. Status: OR
  101.  
  102. Custom wrapper creation.
  103.  
  104. As discussions on the winsock maillist have indicated, creating a DLL
  105. that would provide easy access to winsock from another language (i.e.,
  106. Visual BASIC) is both desirable and difficult to do portably on
  107. Winsock 1.1.  The 2.0 product should explicitly support creating
  108. portable layers on top of Winsock in a DLL.
  109.  
  110. -Vance Gloster
  111.  gloster@inference.com
  112. ????
  113. ????
  114. From relay2.uu.net!uunet.uu.net!tcemail!is3.indy.tce.com!fisherm Fri Jan 28
  115. 10:37:33 1994
  116. Reply-To: tcemail!FisherM@is3.indy.tce.com
  117. Return-Receipt-To: tcemail!is3.indy.tce.com!FisherM@jsbus.com
  118. Date: Fri, 28 Jan 94 13:23:00 PST
  119. From: Fisher Mark <tcemail!is3.indy.tce.com!FisherM@uunet.UU.NET>
  120. Subject: WinSock 2.0 -- Raw Sockets for Ping
  121. To: "Windows Sockets 2.0" <martinh@jsbus.com>
  122. Message-Id: <2D49838A@MSMAIL.INDY.TCE.COM>
  123. Encoding: 12 TEXT
  124. X-Mailer: Microsoft Mail V3.0
  125. Status: OR
  126.  
  127.  
  128. The most needed item is mandatory raw sockets support to the level required 
  129. by ping.  Ping is what everyone uses for initial testing of connections -- 
  130. it should always be able to be written for a conforming WinSock 
  131. implementation.
  132. ======================================================================
  133. Mark Fisher                            Thomson Consumer Electronics
  134. fisherm@tcemail.indy.tce.com           Indianapolis, IN
  135.  
  136. "Just as you should not underestimate the bandwidth of a station wagon
  137. traveling 65 mph filled with 8mm tapes, you should not overestimate
  138. the bandwidth of FTP by mail."
  139. ????
  140. ????
  141. From chaos.tci.com!klaven.tci.com!jspoffor Mon Jan 31 14:49:55 1994
  142. Message-Id: <9401312254.AA04906@chaos.tci.com>
  143. From: jspoffor <jspoffor@klaven.tci.com>
  144. Date: Mon, 31 Jan 94 15:50
  145. To: martinh <martinh@jsbus.com>
  146. Subject: Other Protocols in Winsock 2.0
  147. Status: OR
  148.  
  149.  
  150. I'd really like to see the inclusion of other protocols, and if I had to 
  151. pick only one, I'd say add IPX/SPX.  Perhaps it wouldn't be manditory, but 
  152. there should be some way of determining if it supports IPX/SPX (as opposed 
  153. to TCP/IP) at start up time.  Also, the necessary structures and control 
  154. differences would need to be included in the specification.  Right now, I 
  155. have to add my own abstraction layer to deal with doing SNMP over IPX or IP. 
  156.  It would be great not to need to do that.
  157.  
  158. Jason Spofford
  159. jspoffor@klaven.tci.com
  160.  
  161. ????
  162. ????
  163. From chaos.tci.com!klaven.tci.com!jspoffor Mon Jan 31 14:51:43 1994
  164. Message-Id: <9401312254.AA04910@chaos.tci.com>
  165. From: jspoffor <jspoffor@klaven.tci.com>
  166. Date: Mon, 31 Jan 94 15:50
  167. To: martinh <martinh@jsbus.com>
  168. Subject: SLIP and CSLIP in Winsock 2.0
  169. Status: OR
  170.  
  171.  
  172. It would be great if there was a standard way to support SLIP and CSLIP 
  173. through Winsock.
  174.  
  175. Jason Spofford
  176. jspoffor@klaven.tci.com
  177.  
  178. ????
  179. ????
  180. From chaos.tci.com!klaven.tci.com!jspoffor Mon Jan 31 14:51:43 1994
  181. Message-Id: <9401312254.AA04902@chaos.tci.com>
  182. From: jspoffor <jspoffor@klaven.tci.com>
  183. Date: Mon, 31 Jan 94 15:50
  184. To: martinh <martinh@jsbus.com>
  185. Subject: RAW SOCKETS in Winsock 2.0
  186. Status: OR
  187.  
  188.  
  189. I'm an application developer.  I'd like winsock implementations to have to 
  190. support PING  by providing access to ICMP (i.e. RAW SOCKETS).  I'm sure you 
  191. have  heard this before, I'd just like to add my voice.  
  192.  
  193. ????
  194. ????
  195. From relay2.pipex.net!firefox.co.uk!marke Wed Feb  2 03:45:26 1994
  196. From: Mark Edwards <marke@firefox.co.uk>
  197. X-Mailer: SCO System V Mail (version 3.2)
  198. To: martinh@jsbus.com
  199. Subject: Windows Sockets 2 Contribution
  200. Date: Wed, 2 Feb 94 11:11:10 gmt
  201. Message-ID: <9402021111.aa08003@ffsco.firefox.co.uk>
  202. Status: OR
  203.  
  204. Hi Martin,
  205.  
  206. Long time no see, hope all is well.
  207.  
  208. Item 1.
  209.  
  210. Short Desc: Winsock 2 requires the capability for Multi-protocol support.
  211.  
  212. Longer Desc: This is reasonably easy to provide, since all the DLL needs do
  213. is communicate to the correct stack by checking the protocol family passed
  214. in the socket() call.  It would probably, be a good idea to include an
  215. area in the WSADATA structure that holds the values of the protocol families
  216. that the DLL currently knows about and can handle.  This is not important
  217. to stack vendors who only produce one stack, but affects vendors such as
  218. Microsoft, JSB and Firefox.
  219.  
  220.  
  221. Regards,
  222. Mark.
  223.  
  224. -------------------------------------------------------------------------
  225. Mark S. Edwards
  226. Firefox Communications Ltd,
  227. Cranmore House,
  228. Cranmore Boulevard,
  229. Solihull, West Midlands. United Kingdom. B90 4RX.
  230.  
  231. phone:  021 609 6090 (intl, 44 21 609 6090)
  232. Fax  :  021 609 6060 (intl, 44 21 609 6060)
  233.  
  234. Internet: marke@firefox.co.uk
  235. -------------------------------------------------------------------------
  236. ????
  237. ????
  238. From relay2.pipex.net!firefox.co.uk!marke Wed Feb  2 03:46:34 1994
  239. From: Mark Edwards <marke@firefox.co.uk>
  240. X-Mailer: SCO System V Mail (version 3.2)
  241. To: martinh@jsbus.com
  242. Subject: Windows Sockets 2 Contribution
  243. Date: Wed, 2 Feb 94 11:12:24 gmt
  244. Message-ID: <9402021112.aa08010@ffsco.firefox.co.uk>
  245. Status: OR
  246.  
  247. Martin,
  248.  
  249. Item 2.
  250.  
  251. Short Desc: A mechanism for retrieving Service definitions from a network.
  252.  
  253. Longer Desc: Sockets as it stands is great for protocols where the address
  254. information is known by the application or entered by the user.  It cannot
  255. cope with broadcast service definitions where the user has no idea of the
  256. network address. The means for retrieving service definitions from a 
  257. network is required for protocols such as DEC LAT, IPX/SPX (SAP) and, dare
  258. I say it, Firefox.  We have currently implemented such a mechanism, and
  259. think that it shows promise as a generic 'Extra functionality' handler.
  260.  
  261.  
  262.  
  263. Regards,
  264. Mark.
  265.  
  266. -------------------------------------------------------------------------
  267. Mark S. Edwards
  268. Firefox Communications Ltd,
  269. Cranmore House,
  270. Cranmore Boulevard,
  271. Solihull, West Midlands. United Kingdom. B90 4RX.
  272.  
  273. phone:  021 609 6090 (intl, 44 21 609 6090)
  274. Fax  :  021 609 6060 (intl, 44 21 609 6060)
  275.  
  276. Internet: marke@firefox.co.uk
  277. -------------------------------------------------------------------------
  278. ????
  279. ????
  280. From relay2.pipex.net!firefox.co.uk!marke Wed Feb  2 03:47:57 1994
  281. From: Mark Edwards <marke@firefox.co.uk>
  282. X-Mailer: SCO System V Mail (version 3.2)
  283. To: martinh@jsbus.com
  284. Subject: Windows Sockets 2 Contribution
  285. Date: Wed, 2 Feb 94 11:13:45 gmt
  286. Message-ID: <9402021113.aa08016@ffsco.firefox.co.uk>
  287. Status: OR
  288.  
  289. Martin,
  290.  
  291. Item 3.
  292.  
  293. Short Desc: A clearing house for new protocol families and associated
  294. address types.
  295.  
  296. Longer Desc: Firefox at the moment have implemented a protocol family with
  297. an address structure.  The protocol family is obviously chosen at random
  298. and at the moment conflicts with nobody else.  If vendors are encouraged
  299. to add new protocol types then we need to ensure that the protocol family
  300. numbers do not clash.
  301.  
  302.  
  303.  
  304. Regards,
  305. Mark.
  306.  
  307. -------------------------------------------------------------------------
  308. Mark S. Edwards
  309. Firefox Communications Ltd,
  310. Cranmore House,
  311. Cranmore Boulevard,
  312. Solihull, West Midlands. United Kingdom. B90 4RX.
  313.  
  314. phone:  021 609 6090 (intl, 44 21 609 6090)
  315. Fax  :  021 609 6060 (intl, 44 21 609 6060)
  316.  
  317. Internet: marke@firefox.co.uk
  318. -------------------------------------------------------------------------
  319. ????
  320. ????
  321. From relay2.pipex.net!firefox.co.uk!marke Wed Feb  2 03:49:26 1994
  322. From: Mark Edwards <marke@firefox.co.uk>
  323. X-Mailer: SCO System V Mail (version 3.2)
  324. To: martinh@jsbus.com
  325. Subject: Windows Sockets 2 Contribution
  326. Date: Wed, 2 Feb 94 11:15:10 gmt
  327. Message-ID: <9402021115.aa08022@ffsco.firefox.co.uk>
  328. Status: OR
  329.  
  330. Martin,
  331.  
  332. Item 4.
  333.  
  334. Short Desc: A mechanism for broadcasting service definitions on a network.
  335.  
  336. Longer Desc: If Winsock 2 caters for the retrieval of broadcast service
  337. definitions, then it should also be capable of accepting a service definition
  338. from an application to be broadcast on the network.
  339.  
  340.  
  341. Regards,
  342. Mark.
  343.  
  344. -------------------------------------------------------------------------
  345. Mark S. Edwards
  346. Firefox Communications Ltd,
  347. Cranmore House,
  348. Cranmore Boulevard,
  349. Solihull, West Midlands. United Kingdom. B90 4RX.
  350.  
  351. phone:  021 609 6090 (intl, 44 21 609 6090)
  352. Fax  :  021 609 6060 (intl, 44 21 609 6060)
  353.  
  354. Internet: marke@firefox.co.uk
  355. -------------------------------------------------------------------------
  356. ????
  357. ????
  358. From sun.com!suneast.east.sun.com!rwolin Wed Feb  2 14:11:08 1994
  359. Date: Wed, 2 Feb 1994 17:16:48 +0500
  360. From: Ross Wolin - PC Networking Engineering CONTRACTOR
  361. <rwolin@suneast.East.Sun.COM>
  362. Message-Id: <9402022216.AA11225@denmark.East.Sun.COM>
  363. To: martinh@jsbus.com
  364. Subject: Windows Sockets 2 Contribution
  365. Content-Length: 378
  366. Status: OR
  367.  
  368.  
  369. Callback procedures for asynchronous sockets.
  370.  
  371. Currently asynchronous sockets notify processes of socket events
  372. by sending a Window message.  I would like to see asynchronous
  373. socket have the option to call a callback routine OR send a 
  374. window message.  This functionality would make asynchronous C++
  375. socket objects work much better...
  376.  
  377.  
  378. Ross Wolin
  379. rwolin@suneast.sun.com
  380. "Ni!"
  381. ????
  382. ????
  383. From calypso-2.oit.unc.edu!winsock-hackers Mon Feb  7 15:46:59 1994
  384. Date: Mon, 7 Feb 1994 18:39:36 -0500
  385. Message-Id: <9402072350.AA04134@atlas>
  386. Reply-To: paul@atlas.abccomp.oz.au
  387. Originator: winsock-hackers@sunsite.unc.edu
  388. Sender: winsock-hackers@calypso-2.oit.unc.edu
  389. From: paul@atlas.abccomp.oz.au
  390. To: Multiple recipients of list <winsock-hackers@sunsite.unc.edu>
  391. Subject: Winsock v2
  392. X-Listprocessor-Version: 6.0a -- ListProcessor by Anastasios Kotsikonas
  393. Status: ORP
  394. History: Replied to on 18 Feb 94
  395.  
  396. So we're well into the new year. Is discussion of features/changes
  397. for v2 going to take place on this winsock-hackers list, or on another list
  398. I don't yet know about?
  399.  
  400.  
  401. -- 
  402. Paul Brooks              |paul@abccomp.oz.au       |Emerging Standard:
  403. TurboSoft Pty Ltd        |pwb@newt.phys.unsw.edu.au|  one that has not yet
  404. 579 Harris St., Ultimo   |                         |  been superseded.
  405. Sydney Australia 2007    |ph: +61 2 281 3155       |  
  406. ????
  407. ????
  408. From halon.sybase.com!sybase.com!william Tue Feb  8 12:13:46 1994
  409. From: William Wong <william@sybase.com>
  410. Message-Id: <9402082013.AA23594@mercury.sybgate.sybase.com>
  411. Subject: Windows Sockets 2 Contribution
  412. To: martinh@jsbus.com
  413. Date: Tue, 8 Feb 94 12:13:22 PST
  414. X-Mailer: ELM [version 2.3 PL0]
  415. content-length: 348
  416. Status: OR
  417.  
  418. Winsock 2.0 should add support for BOTH RFC 793 and RFC 1122 styles of 
  419. Out-Of-Band data.
  420.  
  421. Most Unix TCP/IPs use RFC 793 Out-Of-Band data, e.g. Sun4, HP, RS6000, etc.
  422. However, Solaris is getting popular and it is using RFC 1122 OOB.  Winsock
  423. 2.0 implementation should support both and make it user configurable to switch
  424. between the two.
  425.  
  426. William
  427.  
  428. ????
  429. ????
  430. From relay1.uu.net!netmanage.com!tmima Wed Feb  9 16:40:34 1994
  431. Message-Id: <Chameleon.940209175520.tmima@tmima2.netmanage.com>
  432. Date: Wed,  9 Feb 94 17:44:42 PST
  433. Reply-To: Tmima Koren <tmima@netmanage.com>
  434. From: Tmima Koren <tmima@netmanage.com>
  435. To: Martin Hall <martinh@jsbus.com>
  436. Subject: Windows Sockets 2 Contribution
  437. Status: OR
  438.  
  439.  
  440. shared sockets
  441.  
  442. Set 'shared' attribute to a socket, maybe with setsockopt(). 
  443. A shared socket can be passed and used by all tasks.
  444.  
  445.  
  446.  
  447. ????
  448. ????
  449. From magnolia.banyan.com!banyan!eng!mike=procopio Thu Feb 10 10:58:05 1994
  450. Date: Thu, 10 Feb 94 14:09:49 EST
  451. From: Mike=Procopio%Eng%Banyan@magnolia.banyan.com
  452. Subject: re:Windows Sockets 2 Contribution
  453. To: martinh@jsbus.com
  454. Cc: 
  455. Bcc: 
  456. Message-ID:  <9402101058.aa15682@jsbus.jsbus.com>
  457. Status: OR
  458.  
  459.  
  460.  
  461. I would like to see the spec address concurrent access of multiple address 
  462. families in a coherent (common across all implementations) way.
  463.  
  464. Currently, on DOS/Windows 3.1 it is necessary for an APP to use
  465. LoadLibrary(), 
  466. and GetProcAddress() in order to concurrently access winsock.dll's from 
  467. multiple providers providing support for different address families.  There 
  468. should be a standard mechanism.
  469.  
  470. procopio@banyan.com
  471.  
  472. ????
  473. ????
  474. From magnolia.banyan.com!banyan!eng!mike=procopio Thu Feb 10 10:59:47 1994
  475. Date: Thu, 10 Feb 94 14:12:19 EST
  476. From: Mike=Procopio%Eng%Banyan@magnolia.banyan.com
  477. Subject: re:Windows Sockets 2 Contribution
  478. To: martinh@jsbus.com
  479. Cc: 
  480. Bcc: 
  481. Message-ID:  <9402101059.aa15843@jsbus.jsbus.com>
  482. Status: OR
  483.  
  484.  
  485. The semantics of alternate address families need to be defined.
  486.  
  487. Currently, the winsock semantic definition is restricted to TCP/IP.  It needs 
  488. to address other address families as well: IPX/SPX, ISO, etc..
  489.  
  490. procopio@banyan.com
  491.  
  492.  
  493. ????
  494. ????
  495. From magnolia.banyan.com!banyan!eng!mike=procopio Thu Feb 10 11:04:27 1994
  496. Date: Thu, 10 Feb 94 14:16:08 EST
  497. From: Mike=Procopio%Eng%Banyan@magnolia.banyan.com
  498. Subject: re:Windows Sockets 2 Contribution
  499. To: martinh@jsbus.com
  500. Cc: 
  501. Bcc: 
  502. Message-ID:  <9402101104.aa16117@jsbus.jsbus.com>
  503. Status: OR
  504.  
  505.  
  506. Winsock should be enlarged to provide the concept of "in-system" usage.
  507.  
  508. Currently, winsock defines an API restricted to windows applications.  There 
  509. is a real need for a standard in-system interface as well.  The analogy is 
  510. in-system is to winsock what TPI is to TLI.
  511.  
  512. procopio@banyan,.com
  513.  
  514.  
  515.  
  516. ????
  517. ????
  518. From relay1.uu.net!netmanage.com!tmima Thu Feb 10 11:52:02 1994
  519. Message-Id: <Chameleon.940210130746.tmima@tmima2.netmanage.com>
  520. Date: Wed,  9 Feb 94 17:44:42 PST
  521. Reply-To: Tmima Koren <tmima@netmanage.com>
  522. From: Tmima Koren <tmima@netmanage.com>
  523. To: Martin Hall <martinh@jsbus.com>
  524. Subject: Windows Sockets 2 Contribution
  525. Status: OR
  526.  
  527.  
  528. set/get/remove ARP table entry
  529.  
  530.  
  531.  
  532. ????
  533. ????
  534. From relay1.uu.net!netmanage.com!tmima Thu Feb 10 11:52:43 1994
  535. Message-Id: <Chameleon.940210130845.tmima@tmima2.netmanage.com>
  536. Date: Wed,  9 Feb 94 17:44:42 PST
  537. Reply-To: Tmima Koren <tmima@netmanage.com>
  538. From: Tmima Koren <tmima@netmanage.com>
  539. To: Martin Hall <martinh@jsbus.com>
  540. Subject: Windows Sockets 2 Contribution
  541. Status: OR
  542.  
  543.  
  544. gethostid()
  545.  
  546.  
  547. ????
  548. ????
  549. From relay1.uu.net!netmanage.com!tmima Thu Feb 10 12:34:01 1994
  550. Message-Id: <Chameleon.940210134945.tmima@tmima2.netmanage.com>
  551. Date: Wed,  9 Feb 94 17:44:42 PST
  552. Reply-To: Tmima Koren <tmima@netmanage.com>
  553. From: Tmima Koren <tmima@netmanage.com>
  554. To: Martin Hall <martinh@jsbus.com>
  555. Subject: Windows Sockets 2 Contribution
  556. Status: OR
  557.  
  558.  
  559. raw ICMP/IP
  560.  
  561.  
  562.  
  563. ????
  564. ????
  565. From mail.netcom.com!next.distinct.com!vikas Mon Feb 14 11:24:39 1994
  566. From: Vikas Garg <vikas@next.distinct.com>
  567. Message-Id: <9402141929.AA02003@distinct.com>
  568. Subject: Windows Socket 2.0 Contributions
  569. To: Martin Hall <martinh@jsbus.com>
  570. Date: Mon, 14 Feb 1994 11:29:03 -0800 (PST)
  571. Cc: Oliver Spaeth <oliver@distinct.com>
  572. X-Mailer: ELM [version 2.4 PL23]
  573. Content-Type: text
  574. Content-Length: 691       
  575. Status: OR
  576.  
  577. RAW SOCKETS
  578.  
  579. Some level of support for the raw sockets should be included in 
  580. the specs. Wether the access is to be at the ICMP level or the 
  581. IP level should also be clarified.
  582.  
  583. You must me sick of this request by now, so I will leave it at 
  584. this :-)
  585.  
  586. Vikas
  587. -- 
  588. ==========================================================
  589. Vikas Garg                     Phone : (408) 741-0781         
  590. Distinct Corp.                 Fax   : (408) 741-0795         
  591. 12901 Saratoga Ave., Ste. 4    E-Mail: vikas@distinct.com     
  592. Saratoga, CA 95070                                          
  593. U.S.A.                                                      
  594. ==========================================================
  595. ????
  596. ????
  597. From mail.netcom.com!next.distinct.com!vikas Mon Feb 14 11:36:51 1994
  598. From: Vikas Garg <vikas@next.distinct.com>
  599. Message-Id: <9402141941.AA02022@distinct.com>
  600. Subject: Windows Socket 2.0 Contributions
  601. To: Martin Hall <martinh@jsbus.com>
  602. Date: Mon, 14 Feb 1994 11:41:12 -0800 (PST)
  603. Cc: Oliver Spaeth <oliver@distinct.com>
  604. X-Mailer: ELM [version 2.4 PL23]
  605. Content-Type: text
  606. Content-Length: 976       
  607. Status: OR
  608.  
  609. WSAAsyncSelect()
  610.  
  611. At this point in time I am sick of all the FD_@#$% discussions, whatever
  612. way they are supposed to be posted, PLEASE remove the ambiguities.
  613. i)   Should FD_CLOSE be posted when the connection goes into the 
  614.      FIN_WAIT state or when it goes into the FIN_WAIT state AND there
  615.      is no data to be read.
  616. ii)  Should FD_CLOSE be posted once only or for every WSAAsyncSelect call?
  617. iii) Should FD_WRITE be posted only on connect() or accept() or also when 
  618.      WSAAsyncSelect() is called AFTER a successful connect() or accept().
  619.  
  620. ==========================================================
  621. Vikas Garg                     Phone : (408) 741-0781         
  622. Distinct Corp.                 Fax   : (408) 741-0795         
  623. 12901 Saratoga Ave., Ste. 4    E-Mail: vikas@distinct.com     
  624. Saratoga, CA 95070                                          
  625. U.S.A.                                                      
  626. ==========================================================
  627. ????
  628. ????
  629. From netcom3.netcom.com!next.distinct.com!vikas Mon Feb 14 11:41:49 1994
  630. From: Vikas Garg <vikas@next.distinct.com>
  631. Message-Id: <9402141945.AA02036@distinct.com>
  632. Subject: Windows Socket 2.0 Contributions
  633. To: Martin Hall <martinh@jsbus.com>
  634. Date: Mon, 14 Feb 1994 11:45:09 -0800 (PST)
  635. Cc: Oliver Spaeth <oliver@distinct.com>
  636. X-Mailer: ELM [version 2.4 PL23]
  637. Content-Type: text
  638. Content-Length: 541       
  639. Status: OR
  640.  
  641. Sharing of Sockets among applications
  642.  
  643. The topic says it all, you must be sick of this request also.
  644.  
  645. Vikas
  646. -- 
  647. ==========================================================
  648. Vikas Garg                     Phone : (408) 741-0781         
  649. Distinct Corp.                 Fax   : (408) 741-0795         
  650. 12901 Saratoga Ave., Ste. 4    E-Mail: vikas@distinct.com     
  651. Saratoga, CA 95070                                          
  652. U.S.A.                                                      
  653. ==========================================================
  654. ????
  655. ????
  656. From mail.netcom.com!next.distinct.com!vikas Mon Feb 14 11:44:52 1994
  657. From: Vikas Garg <vikas@next.distinct.com>
  658. Message-Id: <9402141949.AA02047@distinct.com>
  659. Subject: Windows Socket 2.0 Contributions
  660. To: Martin Hall <martinh@jsbus.com>
  661. Date: Mon, 14 Feb 1994 11:49:09 -0800 (PST)
  662. Cc: Oliver Spaeth <oliver@distinct.com>
  663. X-Mailer: ELM [version 2.4 PL23]
  664. Content-Type: text
  665. Content-Length: 919       
  666. Status: OR
  667.  
  668. Multiple Versions
  669.  
  670. Now that the situation to have multiple versions actually 
  671. exists, can a winsock dll support multiple versions??
  672. I would recommend against it since it can cause a lot of
  673. headaches if an application is using 2.0 and an intermediate
  674. DLL is using 1.1. 
  675. If multiple version support is to be allowed, then please 
  676. clarify how this problem is to be resolved also the version
  677. requested should not be ignored in subsequent calls to 
  678. WSAStartup (page 108 second para.)
  679.  
  680. Vikas
  681. -- 
  682. ==========================================================
  683. Vikas Garg                     Phone : (408) 741-0781         
  684. Distinct Corp.                 Fax   : (408) 741-0795         
  685. 12901 Saratoga Ave., Ste. 4    E-Mail: vikas@distinct.com     
  686. Saratoga, CA 95070                                          
  687. U.S.A.                                                      
  688. ==========================================================
  689. ????
  690. ????
  691. From netcom3.netcom.com!next.distinct.com!vikas Mon Feb 14 11:48:01 1994
  692. From: Vikas Garg <vikas@next.distinct.com>
  693. Message-Id: <9402141951.AA02058@distinct.com>
  694. Subject: Windows Sockets 2.0 Contributions
  695. To: Martin Hall <martinh@jsbus.com>
  696. Date: Mon, 14 Feb 1994 11:51:16 -0800 (PST)
  697. X-Mailer: ELM [version 2.4 PL23]
  698. Content-Type: text
  699. Content-Length: 666       
  700. Status: OR
  701.  
  702. Hosts List
  703.  
  704. Some standard way for the applications to retrieve the list
  705. of available hosts. Maybe a function that returns the hosts
  706. as a linked list, or a standard way of saving the hosts in 
  707. a file in the windows directory.
  708.  
  709. Vikas
  710.  
  711. -- 
  712. ==========================================================
  713. Vikas Garg                     Phone : (408) 741-0781         
  714. Distinct Corp.                 Fax   : (408) 741-0795         
  715. 12901 Saratoga Ave., Ste. 4    E-Mail: vikas@distinct.com     
  716. Saratoga, CA 95070                                          
  717. U.S.A.                                                      
  718. ==========================================================
  719. ????
  720. ????
  721. From netcom3.netcom.com!next.distinct.com!vikas Tue Feb 15 21:30:11 1994
  722. From: Vikas Garg <vikas@next.distinct.com>
  723. Message-Id: <9402160115.AA04352@distinct.com>
  724. Subject: Windows Socket 2.0 Contribution
  725. To: Martin Hall <martinh@jsbus.com>
  726. Date: Tue, 15 Feb 1994 17:15:17 -0800 (PST)
  727. X-Mailer: ELM [version 2.4 PL23]
  728. Content-Type: text
  729. Content-Length: 799       
  730. Status: ORP
  731. History: Replied to on 18 Feb 94
  732.  
  733. Yielding by an application
  734.  
  735. Can an application sit in a tight loop waiting on a select()
  736. without yielding control at all? The current specs say that 
  737. this is illegal, however lot of applications (including WSAT)
  738. use this programming model. I hope we can either clarify it
  739. a bit more in the next version, or remove the requirement for
  740. applications to yield...
  741.  
  742. Vikas
  743. -- 
  744. ==========================================================
  745. Vikas Garg                     Phone : (408) 741-0781         
  746. Distinct Corp.                 Fax   : (408) 741-0795         
  747. 12901 Saratoga Ave., Ste. 4    E-Mail: vikas@distinct.com     
  748. Saratoga, CA 95070                                          
  749. U.S.A.                                                      
  750. ==========================================================
  751. ????
  752. ????
  753. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Wed Feb 16
  754. 13:28:25 1994
  755. Date: Wed, 16 Feb 94 13:34:32 PST
  756. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  757. Message-ID: <940216133432_8@ccm.hf.intel.com>
  758. To: martinh@jsbus.com
  759. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  760. Subject: Input for Winsock ver 2
  761. Status: OR
  762.  
  763.  
  764. Text item: Text_1
  765.  
  766.                                                     02/16/94
  767. Dear Martin,
  768.  
  769. Intel is pleased to supply the following input to the Winsock 2
  770. definition process. There are 10 proposals in all, with this submittal
  771. corresponding to proposal number 1.
  772.  
  773. For each of our proposals we supply a desciption of the proposed
  774. extension, our motivations for making the extension proposal, and the
  775. detailed syntax for how the extension might be implemented.
  776.  
  777. We would also like to volunteer our services to assist in the process
  778. of collating and summarizing the various submitals that are coming in
  779. from Forum members.  Please let us know how we can best assist you in
  780. this process.
  781.  
  782. Regards,
  783.  
  784. David B. Andersen
  785. Intel Architecture Labs
  786.  
  787.  
  788. Extension #1:
  789.      Replace vendor-specific Winsock.DLLs with a single DLL
  790.  
  791. Description:
  792. Existing Winsock implementations are all vendor-specific
  793. since no standard interface is defined for the interface
  794. between Winsock.DLL and protocol stacks.  Version 2 of
  795. Winsock should change the model by defining such an
  796. interface (subsequently referred to as a Service Provider
  797. Interface or SPI).
  798.  
  799. Motivation:
  800. Some level of ambiguity remains in the current version of
  801. the Winsock spec which results in subtle but sometimes
  802. crucial differences in how various Winsock implementations
  803. behave.  Having a single Winsock DLL would ensure more
  804. uniform behavior, while allowing stack vendors to avoid
  805. duplication of effort.  (Let's free up  their resources so
  806. they can concentrate on improved versions of their stacks!)
  807.  
  808. This also paves the way for multiprotocol support as
  809. outlined in our proposed extension #2.
  810.  
  811. Semantics:
  812. A Winsock SPI specification would need to be created.   An
  813. ini file will also need to be defined for the Winsock DLL
  814. which would provide it with the information requried to
  815. discover what underlying stacks were present and enable them
  816. to be loaded as required.  Intel is prepared to make
  817. additional suggestions for a  SPI specification and ini file
  818. format if the forum wishes to pursue this proposal further.
  819.  
  820. ????
  821. ????
  822. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Wed Feb 16
  823. 13:31:23 1994
  824. Date: Wed, 16 Feb 94 13:37:09 PST
  825. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  826. Message-ID: <940216133709_4@ccm.hf.intel.com>
  827. To: martinh@jsbus.com
  828. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  829. Subject: Input for Winsock ver 2  
  830. Status: OR
  831.  
  832.  
  833. Text item: Text_1
  834.  
  835.                                                     02/16/94
  836. Dear Martin,
  837.  
  838. Intel is pleased to supply the following input to the Winsock 2
  839. definition process. There are 10 proposals in all, with this submittal
  840. corresponding to proposal number 2.
  841.  
  842. For each of our proposals we supply a desciption of the proposed
  843. extension, our motivations for making the extension proposal, and the
  844. detailed syntax for how the extension might be implemented.
  845.  
  846. We would also like to volunteer our services to assist in the process
  847. of collating and summarizing the various submitals that are coming in
  848. from Forum members.  Please let us know how we can best assist you in
  849. this process.
  850.  
  851. Regards,
  852.  
  853. David B. Andersen
  854. Intel Architecture Labs
  855.  
  856.  
  857. Extension #2:
  858.      Support multiple transport protocols simultaneously
  859.  
  860. Description:
  861. The Winsock interface should be generalized so as to provide
  862. access to any transport layer protocol.  Furthermore, this
  863. should be done in such a way that at single app may have
  864. simultaneous access to multiple protocol stacks.  While a
  865. unified addressing scheme that works across all protocols
  866. would also be desirable, so too would solving world hunger.
  867. For pragmatic reasons we suggest that Winsock version 2 not
  868. try and include a universal addressing model.  Rather, it
  869. should be entirely neutral with respect to the addressing
  870. format of each underlying transport protocol.
  871.  
  872. Motivation:
  873. While TCP/IP is an essential protocol stack, in the PC space
  874. there are many others that are very important as well (e.g.
  875. IPX, NetBIOS, DECNET, Vines, etc.).  Application developers
  876. should not be required to utilize multiple APIs in order to
  877. host their application on multiple transports.  Similarly,
  878. it is very possible that the server side of a client/server
  879. application may need to support various clients that do not
  880. all utilize the same transport protocol.
  881.  
  882. Semantics:
  883. This proposal also requires that a SPI and ini file format
  884. be defined for Winsock as mentioned in our proposed
  885. extension #1.  Intel is prepared to make additional
  886. suggestions for a  SPI specification and ini file format if
  887. the forum wishes to pursue this proposal further.
  888.  
  889. Implementation of this suggestion would also require that
  890. the API verbage be carefully edited to remove the existing
  891. bias towards and assumption of TCP/IP.  A few new functions
  892. are needed  to allow an application to evaluate the
  893. available transport choices and determine which transport to
  894. use when creating new sockets or using the getXbyY database
  895. routines.
  896.  
  897. We propose the creation of a new WSA function for
  898. enumerating through the various service providers.  Syntax
  899. is as follows:
  900.  
  901.  
  902.    int PASCAL FAR WSAEnumProviders ( FARPROC lpfnCallback, int
  903. iAddressFamily);
  904.    
  905.           lpfnCallback   Specifies the procedure instance
  906.                     address of the callback function to be
  907.                     invoked by Winsock.DLL for each Service
  908.                     Provider.
  909.           
  910.           iAddressFamily Specifies the address family that
  911.                     any enumerated Service Provider should
  912.                     support.  This can be used as a filter,
  913.                     so that an application can get a list of
  914.                     Service Providers that support, e.g.,
  915.                     AF_INET addresses.  To get a list of
  916.                     every Service Provider, this parameter
  917.                     should be zero.
  918.  
  919.           This function is used to enumerate the Service
  920.           Providers registered with and therefore accessible
  921.           from the Winsock.DLL.  It allows a descriptive
  922.           text string, Service Provider Key, address family,
  923.           socket types, and length of the address (in bytes)
  924.           for each registered Service Provider to be
  925.           retrieved.
  926.           
  927.           WSAEnumProviders() uses the standard Windows
  928.           enumeration procedure using a "callback" function.
  929.           The callback function is called once for each
  930.           Service Provider registered in the "Winsock.ini"
  931.           that matches the address family.  This will be
  932.           repeated until either the callback function
  933.           returns zero or the end of the list of Service
  934.           Providers is reached.
  935.           
  936.           The prototype of the callback function is as
  937.           follows:
  938.           
  939.       int PASCAL FAR CallbackFunc( LPSTR lpszDescription, char FAR *
  940.           ProviderKey, int iAddressFamily, int FAR * lpSocketType, 
  941.                   int iAddressLength );
  942.           
  943.           CallbackFunc is a placeholder for the application-
  944.           supplied function name.  The actual callback
  945.           function must reside in a DLL or application
  946.           module and be exported in the module definition
  947.           file.  You must use MakeProcInstance() to get a
  948.           procedure-instance address for the callback
  949.           function.  The callback function must return
  950.           nonzero to continue enumeration; to stop
  951.           enumeration, it must return zero.
  952.           
  953.           lpSocketType points to a 0-terminated integer
  954.           array indicating all the socket types supported by
  955.           the Service Provider identified by ProviderKey
  956.           along with a text description lpszDescription.
  957.           The address family supported by the Service
  958.           Provider is specified by iAddressFamily, and the
  959.           (maximum) length of the address (in bytes) by
  960.           iAddressSize, which allows applications to
  961.           allocate a big enough buffer for address in this
  962.           address family.
  963.  
  964. In addition, we propose a new WSA function to allow an
  965. application to specify a particular service provider to use
  966. when creating new sockets and when accessing the getXbyY
  967. database routines.  Syntax for this function is as follows:
  968.  
  969.      int PASCAL FAR WSAProviderSelection ( char FAR * ProviderKey );
  970.           
  971.           ProviderKey    The Key of the Service Provider to
  972.                               be selected.
  973.  
  974. Remarks   This function selects the Service Provider to be
  975.           used for the current task until the next
  976.           invocation of this function.  Winsock functions
  977.           which may be affected by this function include
  978.           socket(), getXbyY(), and WSAAsyncGetXByY().
  979.           Applications can eliminate any pre-selected
  980.           Service Provider by setting ProviderKey to be
  981.           NULL.  This indicates to the Winsock DLL that it
  982.           should determine for itself which service provider
  983.           to use based on the socket type and address family
  984.           parameters to the socket() call.  Whenever this
  985.           function is used to set the provider selection to
  986.           NULL, the default database provider as specified
  987.           in the Winsock ini file is used for getXbyY
  988.           functions.  The provider keys of Service Providers
  989.           can be obtained by using WSAEnumProviders().
  990.  
  991. Finally, it is necessary to ignore the value of the
  992. iMaxUdpDg field in the WSAData structure which is obtained
  993. via the WSAStartup() function.  As a replacement for this,
  994. we propose a new get-only socket option: SO_MAX_DG_SIZE.
  995.  
  996. ????
  997. ????
  998. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Wed Feb 16
  999. 13:36:00 1994
  1000. Date: Wed, 16 Feb 94 13:42:10 PST
  1001. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  1002. Message-ID: <940216134210_2@ccm.hf.intel.com>
  1003. To: martinh@jsbus.com
  1004. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  1005. Subject: Input for Winsock ver 2
  1006. Status: OR
  1007.  
  1008.  
  1009. Text item: Text_1
  1010.  
  1011.                                                     02/16/94
  1012. Dear Martin,
  1013.  
  1014. Intel is pleased to supply the following input to the Winsock 2
  1015. definition process. There are 10 proposals in all, with this submittal
  1016. corresponding to proposal number 3.
  1017.  
  1018. For each of our proposals we supply a desciption of the proposed
  1019. extension, our motivations for making the extension proposal, and the
  1020. detailed syntax for how the extension might be implemented.
  1021.  
  1022. We would also like to volunteer our services to assist in the process
  1023. of collating and summarizing the various submitals that are coming in
  1024. from Forum members.  Please let us know how we can best assist you in
  1025. this process.
  1026.  
  1027. Regards,
  1028.  
  1029. David B. Andersen
  1030. Intel Architecture Labs
  1031.  
  1032.  
  1033. Extension #3:
  1034.      Expand the list of socket types and adopt a more
  1035.         desriptive naming convention
  1036.  
  1037. Description:
  1038. If Winsock provides access to  protocols other than TCP/IP
  1039. it will need to support more than just the SOCK_DGRAM and
  1040. SOCK_STREAM socket types.  We  propose an expanded set of
  1041. socket types that utilize a more descriptive and uniform
  1042. naming convention.  We do not advocate that service
  1043. providers be required to support all or any particular set
  1044. of socket types, with the exception that support for raw
  1045. sockets (SOCK_RAW) should be mandatory.  Some of the
  1046. communications properties which should be supported are:
  1047. connectedness, reliability, preservation of transmission
  1048. boundaries, directionality and isochronicity.
  1049.  
  1050. Motivation:
  1051. Sockets are typed according to the communication properties
  1052. visible to a user.  Socket type names should be chosen to
  1053. reflect the essential attributes of the corresponding
  1054. socket.  Other transport protocols support communications
  1055. properties different from those available within TCP/IP.  In
  1056. particular, protocol stacks that are optimized for real-time
  1057. multimedia applications have unique properties which must be
  1058. accessible to an application.
  1059.  
  1060. Proposed Semantics:
  1061. We propose that socket type naming be based on the following
  1062. convention:
  1063.  
  1064.      SOCK_RAW or
  1065.      SOCK_ [ REL | UNREL ][ _ISOCH ][ _UNISEND | _UNIRECV ]
  1066.            [_STREAM | _DGRAM |  _DSTREAM ]
  1067.  
  1068.  
  1069. Raw sockets provide a mechanism to bypass the usual protocol
  1070. layers and are very much dependent on the particulars of
  1071. each service provider.  Service providers should be required
  1072. to support raw sockets.
  1073.  
  1074. [ REL | UNREL ] indicates whether or not the socket provides
  1075. reliable communication.  Reliability  implies that the
  1076. transport will ensure that all transmitted information
  1077. arrives at the remote end or, failing in its attempts to
  1078. accomplish this,  will inform the application that reliable
  1079. communication with the designated endpoint is currently not
  1080. possible.
  1081.  
  1082. [ _ISOCH ] indicates that the socket supports isochronous
  1083. communications in which the time intervals between
  1084. successive transmissions are (apparently) maintained
  1085. throughout the network and reflected at the receiving end.
  1086.  
  1087. [ _UNISEND | _UNIRECV ] restricts a socket to be uni-
  1088. directional and allows only send or receive operations as
  1089. indicated.   Otherwise, all sockets are bi-directional.
  1090.  
  1091. [ _STREAM | _DSTREAM | _DGRAM ] indicates whether the socket
  1092. is connection-oriented (STREAM and DSTREAM) or
  1093. connectionless (DGRAM).  Connection-oriented, stream style
  1094. sockets guarantee that information arriving at the receiving
  1095. application will appear in correct sequence and without
  1096. duplication.  Note that this does not imply reliability
  1097. (guaranteeing that all of the information will arrive).
  1098. Rather it ensures that information which does arrive will be
  1099. unduplicated and in correct sequence.   Connectionless
  1100. sockets (DGRAM), do not possess stream attributes and hence
  1101. may provide information which is duplicated and/or out of
  1102. sequence.  The difference between a STREAM and a DSTREAM
  1103. socket is that message boundaries are not preserved in the
  1104. former(i.e. a byte stream) and are preserved in the latter
  1105. (i.e. a message stream).
  1106.  
  1107. Using this naming convention for socket types, the two
  1108. styles of communication supported by TCP/IP (TCP streams and
  1109. UDP datagrams) would be referred to as SOCK_REL_STREAM and
  1110. SOCK_UNREL_DGRAM respectively.  To maintain compatibility
  1111. with existing socket-based applications, the Winsock header
  1112. file would include alias definitions for the familiar
  1113. SOCK_STREAM and SOCK_DGRAM socket types.
  1114.  
  1115. ????
  1116. ????
  1117. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Wed Feb 16
  1118. 13:38:06 1994
  1119. Date: Wed, 16 Feb 94 13:43:26 PST
  1120. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  1121. Message-ID: <940216134326_4@ccm.hf.intel.com>
  1122. To: martinh@jsbus.com
  1123. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  1124. Subject: Input for Winsock ver 2
  1125. Status: OR
  1126.  
  1127.  
  1128. Text item: Text_1
  1129.  
  1130.                                                     02/16/94
  1131. Dear Martin,
  1132.  
  1133. Intel is pleased to supply the following input to the Winsock 2
  1134. definition process. There are 10 proposals in all, with this submittal
  1135. corresponding to proposal number 4.
  1136.  
  1137. For each of our proposals we supply a desciption of the proposed
  1138. extension, our motivations for making the extension proposal, and the
  1139. detailed syntax for how the extension might be implemented.
  1140.  
  1141. We would also like to volunteer our services to assist in the process
  1142. of collating and summarizing the various submitals that are coming in
  1143. from Forum members.  Please let us know how we can best assist you in
  1144. this process.
  1145.  
  1146. Regards,
  1147.  
  1148. David B. Andersen
  1149. Intel Architecture Labs
  1150.  
  1151.  
  1152. Extension #4:
  1153.      Provide a means for sockets to be shared across applications
  1154.  
  1155. Description:
  1156. We believe it is essential that a paradigm for socket
  1157. sharing be available in Winsock that is applicable to Win
  1158. 3.1 as well as the Chicago and NT environments.  We are
  1159. uncomfortable with the approach of simply declaring that
  1160. socket values must be globally unique while removing any
  1161. existing checks that force the using and owning tasks to be
  1162. the same.  In environments such as Chicago and NT a socket
  1163. can be used as a file descriptor and we must assume,
  1164. therefore, that like file descriptors, socket values will
  1165. only have meaning within the context of the owning task.
  1166.  
  1167. Motivation:
  1168. Shared sockets have been frequently referred to on the net
  1169. as a desirable feature for version 2.  In our own work with
  1170. multimedia communications we have run across numerous
  1171. instances where this capability would lead to simplified
  1172. implementation.
  1173.  
  1174. Semantics:
  1175. We propose a new construct, which we refer to as a "virtual
  1176. socket", as a mechanism to avoid these difficulties.
  1177. Virtual socket are created in the context of the source task
  1178. by supplying an existing, local socket descriptor and a
  1179. handle to the target task (which could be the same task as
  1180. the source task) for which the virtual socket will be used:
  1181.  
  1182.      
  1183.      SOCKET  vs ;
  1184.      
  1185.      vs =  WSADuplicateSocket( SOCKET s, HTASK hTargetTask );
  1186.      
  1187.      
  1188. To get the target task's handle, it will generally  be
  1189. necessary to use some form of interprocess communication
  1190. (IPC), e.g., DDE and PostAppMessgage () in Windows 3.1, or
  1191. named pipe and shared memory in Windows NT.  Since vs is
  1192. only valid in the context of the target task, the source
  1193. task must pass the value of the virtual socket to the target
  1194. task, also via your favorite IPC mechanism.
  1195.  
  1196. Virtual sockets may be used in all places where regular
  1197. sockets are used and are, in fact, indistinguishable from
  1198. them.  Virtual sockets derived from a common underlying
  1199. socket share all aspects of the underlying shared socket
  1200. with the exception of the notification mechanism.  Reference
  1201. counting is employed to ensure that the underlying shared
  1202. socket is not closed until the last virtual socket is
  1203. closed.
  1204.  
  1205. Since the collection of attributes which comprise a virtual
  1206. socket's option set is shared, setting any socket option may
  1207. have a global effect.  For example, if one task uses
  1208. ioctlsocket() on a virtual socket to set it into non-
  1209. blocking mode, this change is visible to all of the virtual
  1210. sockets that reference the underlying shared socket.
  1211.  
  1212.  Each virtual socket has an independent notification
  1213. mechanism which conforms to the usual Winsock conventions.
  1214. For example, two tasks may wish to share a socket and
  1215. operate in a cooperative fashion where one is the sender and
  1216. the other the receiver.  Each task may arrange for
  1217. notification appropriate to its role.  In the pathological
  1218. case of two or more tasks sharing an underlying socket and
  1219. each requesting asynchronous notification  when data is
  1220. ready to be read (foolish thing to do that this may be), all
  1221. such tasks will receive their stipulated message in an
  1222. unspecified sequence.  The first task to perform a read will
  1223. get some or all of the available data, the others will get
  1224. what's left, if any.  In other words, in all cases it is
  1225. completely up to tasks which share a socket to coordinate
  1226. their access to the socket.
  1227.  
  1228. As an interesting aside, we note that simply invoking the
  1229. WSADuplicateSocket() function on a socket s, causes s itself
  1230. to become a virtual socket which references the original
  1231. (and now underlying) socket.
  1232.  
  1233.  
  1234. ????
  1235. ????
  1236. From intelhf.intel.com!ccm!david_b_andersen Thu Feb 17 15:42:39 1994
  1237. Date: Thu, 17 Feb 94 15:49:16 PST
  1238. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  1239. Message-ID: <940217154916_7@ccm.hf.intel.com>
  1240. To: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM, martinh@jsbus.com
  1241. Subject: Input for Winsock ver 2
  1242. Status: OR
  1243.  
  1244.  
  1245. Text item: Text_1
  1246.  
  1247.                                                     02/17/94
  1248. Dear Martin,
  1249.  
  1250. Intel is pleased to supply the following input to the Winsock 2
  1251. definition process. There are 10 proposals in all, with this submittal
  1252. corresponding to proposal number 5.
  1253.  
  1254. For each of our proposals we supply a desciption of the proposed
  1255. extension, our motivations for making the extension proposal, and the
  1256. detailed syntax for how the extension might be implemented.
  1257.  
  1258. We would also like to volunteer our services to assist in the process
  1259. of collating and summarizing the various submitals that are coming in
  1260. from Forum members.  Please let us know how we can best assist you in
  1261. this process.
  1262.  
  1263. Regards,
  1264.  
  1265. David B. Andersen
  1266. Intel Architecture Labs
  1267.  
  1268.  
  1269. Extension #5:
  1270.      Provide support for protocol stacks which allow send()
  1271.      and recv() operations within interrupt context.
  1272.  
  1273. Description:
  1274. Some transport stacks allow an application to minimize
  1275. latency and maximize throughput by invoking the send and
  1276. receive operations from within interrupt context. A means
  1277. should be provided to determine which transport stacks
  1278. support this capability.  Also the application must have a
  1279. means to indicate to the Winsock DLL that a particular send
  1280. or receive invocation is occurring within interrupt context.
  1281.  
  1282. Motivation:
  1283. Apps which send media streams over communications channels
  1284. are often very sensitive to latency variations.  By
  1285. supporting send and receive operations in interrupt context
  1286. the amount of variance in perceived latency can be
  1287. minimized.  Also, by supporting this capability at the API
  1288. level, we encourage more stack vendors to support this
  1289. feature.
  1290.  
  1291. Semantics:
  1292. We propose that a new get-only socket option be defined:
  1293. SO_INTERRUPT.  This option would be used by a service
  1294. provider to indicate whether or not it supported interrupt
  1295. context operations.  Also, we propose the definition of an
  1296. additional bit in the flags parameter used with send(),
  1297. sendto(), recv() and recvfrom().  This bit would be called
  1298. MSG_INTERRUPT and would be used by the app to indicate to
  1299. the Winsock DLL that the particular send or receive
  1300. operation was being performed in interrupt context.
  1301.  
  1302.  
  1303. ????
  1304. ????
  1305. From intelhf.intel.com!ccm!david_b_andersen Thu Feb 17 15:45:29 1994
  1306. Date: Thu, 17 Feb 94 15:52:07 PST
  1307. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  1308. Message-ID: <940217155207_6@ccm.hf.intel.com>
  1309. To: martinh@jsbus.com
  1310. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  1311. Subject: Input for Winsock ver 2
  1312. Status: OR
  1313.  
  1314.  
  1315. Text item: Text_1
  1316.  
  1317.                                                     02/17/94
  1318. Dear Martin,
  1319.  
  1320. Intel is pleased to supply the following input to the Winsock 2
  1321. definition process. There are 10 proposals in all, with this submittal
  1322. corresponding to proposal number 6.
  1323.  
  1324. For each of our proposals we supply a desciption of the proposed
  1325. extension, our motivations for making the extension proposal, and the
  1326. detailed syntax for how the extension might be implemented.
  1327.  
  1328. We would also like to volunteer our services to assist in the process
  1329. of collating and summarizing the various submitals that are coming in
  1330. from Forum members.  Please let us know how we can best assist you in
  1331. this process.
  1332.  
  1333. Regards,
  1334.  
  1335. David B. Andersen
  1336. Intel Architecture Labs
  1337.  
  1338.  
  1339. Extension #6:
  1340.      Provide callback notification
  1341.  
  1342. Description:
  1343. Applications should be able to select a callback style of
  1344. notification in addition to the current Windows message
  1345. based notification mechanism.  This would be the only
  1346. notification mechanism available for apps that perform send
  1347. and receive operation from within interrupt context.
  1348.  
  1349. The callback notification method should also allow an
  1350. application to supply an uninterpreted token as a parameter
  1351. to the notification request function, which is subsequently
  1352. returned to the app as a parameter of the callback function.
  1353.  
  1354. Motivation:
  1355. This is being proposed primarily as a means to support
  1356. interrupt context send and receive operations.  However,
  1357. significant additional value is added by including the user
  1358. supplied token.
  1359.  
  1360. Semantics:
  1361. We propose the a new WSA function be defined for requesting
  1362. callback notification:
  1363.  
  1364. int PASCAL FAR WSACallbackSelect ( SOCKET s, FARPROC lpfnCallback,
  1365.           DWORD dwCallbackData,  long lEvent );
  1366.  
  1367.           
  1368.           s          A descriptor identifying the socket for
  1369.                     which event notification is required.
  1370.           
  1371.           lpfnCallback   The procedure instance address of
  1372.                     the callback function to be invoked by
  1373.                     Winsock.DLL whenever a registered
  1374.                     network event happens.
  1375.           
  1376.           dwCallbackData A callback data passed back to the
  1377.                     application in the callback.  This
  1378.                     object is not interpreted by Winsock
  1379.                     implementation.
  1380.           
  1381.           lEvent    A bit mask which specifies a combination
  1382.                     of network events in which the
  1383.                     application is interested.
  1384.           
  1385.  
  1386.           This function will enable the function-based
  1387.           callback mechanism for the specified socket.
  1388.           WSACallbackSelect() is designed to get around the
  1389.           potential Windows message delay introduced by the
  1390.           WSAAsyncSelect() mechanism in order to support
  1391.           delay-sensitive applications.  The callback
  1392.           function will be invoked whenever Winsock detects
  1393.           any of the network events specified by the lEvent
  1394.           parameter.  The socket for which notification is
  1395.           required is identified by s.   The dwCallbackData
  1396.           will be passed back to the application along with
  1397.           the callback.
  1398.           
  1399.           This function automatically sets socket s to non-
  1400.           blocking mode.
  1401.           
  1402.           The prototype of the callback function is as
  1403.           follows:
  1404.           
  1405.                VOID PASCAL FAR CallbackFunc( SOCKET s, long
  1406.           lEvent, int    ErrorCode, DWORD dwCallbackData );
  1407.           
  1408.      
  1409.  
  1410. ????
  1411. ????
  1412. From intelhf.intel.com!ccm!david_b_andersen Thu Feb 17 15:45:52 1994
  1413. Date: Thu, 17 Feb 94 15:52:09 PST
  1414. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  1415. Message-ID: <940217155209_7@ccm.hf.intel.com>
  1416. To: martinh@jsbus.com
  1417. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  1418. Subject: Input for Winsock ver 2
  1419. Status: OR
  1420.  
  1421.  
  1422. Text item: Text_1
  1423.  
  1424.                                                     02/17/94
  1425. Dear Martin,
  1426.  
  1427. Intel is pleased to supply the following input to the Winsock 2
  1428. definition process. There are 10 proposals in all, with this submittal
  1429. corresponding to proposal number 7.
  1430.  
  1431. For each of our proposals we supply a desciption of the proposed
  1432. extension, our motivations for making the extension proposal, and the
  1433. detailed syntax for how the extension might be implemented.
  1434.  
  1435. We would also like to volunteer our services to assist in the process
  1436. of collating and summarizing the various submitals that are coming in
  1437. from Forum members.  Please let us know how we can best assist you in
  1438. this process.
  1439.  
  1440. Regards,
  1441.  
  1442. David B. Andersen
  1443. Intel Architecture Labs
  1444.  
  1445.  
  1446. Extension #7:
  1447.      Socket groups
  1448.  
  1449. Description:
  1450. We propose that the notion of a socket group be introduced
  1451. as a means for an application (or cooperating set of
  1452. applications) to indicate to an underlying service provider
  1453. that a particular set of sockets are related and that the
  1454. group thus formed has certain attributes.  Proposed group
  1455. attributes include relative priorities of the individual
  1456. sockets within the group and a group quality of service
  1457. specification.  A new function is also proposed to allow an
  1458. application to enumerate through the member sockets of a
  1459. group.
  1460.  
  1461. Motivation:
  1462. Applications needing to exchange multiple media streams over
  1463. the network are benefited by being able to establish a
  1464. specific relationship among the set of sockets being
  1465. utilized.  As a minimum this might include a hint to the
  1466. service provider about the relative priorities of the media
  1467. streams being carried.  For example, a conferencing
  1468. application would want to have the socket used for carrying
  1469. the audio stream be given higher priority than that of the
  1470. socket used for the video stream.
  1471.  
  1472. Furthermore, there are transport providers (e.g. digital
  1473. telephony and ATM) which can utilize a group quality of
  1474. service specification to determine the appropriate
  1475. characteristics for the underlying call.  The sockets within
  1476. this group would then be multiplexed in the usual manner
  1477. over this call.  By allowing the application to identify the
  1478. sockets that make up a group and to specify the required
  1479. group attributes, such service providers can operate with
  1480. maximum effectiveness.
  1481.  
  1482. Semantics:
  1483. We propose that the grouping of sockets be performed at the
  1484. time when a connection request is made or when incoming
  1485. socket connections are accepted.  This would include both
  1486. the creation of new groups and the addition of a socket to
  1487. an existing group.  Also, we suggest that two different
  1488. types of groups be supported: constrained and unconstrained.
  1489. In all cases sockets to be grouped must be associated with
  1490. the same service provider.  Sockets joined into an
  1491. unconstrained group may have any host as their destination.
  1492. Sockets joined to a constrained group must all have the same
  1493. host as their destination (although the port number portion
  1494. of their destination addresses may certainly differ).  The
  1495. syntax for a WSA version of connect would be as follows:
  1496.  
  1497. int PASCAL FAR WSAConnectEx ( SOCKET s, const struct sockaddr FAR * name,
  1498.           int namelen, GROUP g, char  FAR * lpSFlowspec, int iSFlowspecLen,
  1499.           char FAR * lpGFlowspec, int iGFlowspecLen );
  1500.           
  1501.           s          A descriptor identifying an unconnected
  1502.                     socket.
  1503.           
  1504.           name      The name of the peer to which the socket
  1505.                     is to be connected.
  1506.           
  1507.           namelen   The length of the name.
  1508.           
  1509.           g         The identifier of the socket group.
  1510.           
  1511.           lpSFlowspec    A pointer to the flow spec for
  1512.                     socket s.
  1513.           
  1514.           iSFlowspecLen  The length of the flow spec for
  1515.                     socket s.  It must be larger than or
  1516.                     equal to the size of struct FLOWSPEC.
  1517.           
  1518.           lpGFlowspec    A pointer to the flow spec for the
  1519.                     socket group to be created, if the value
  1520.                     of parameter g is SG_CONSTRAINED_GROUP.
  1521.           
  1522.           iGFlowspecLen  The length of the flow spec for the
  1523.                     socket group to be created, if the value
  1524.                     of parameter g is SG_CONSTRAINED_GROUP.
  1525.                     It must be larger than or equal to the
  1526.                     size of struct FLOWSPEC.
  1527.  
  1528.           This function is used to create a connection to
  1529.           the specified destination.  For connection-
  1530.           oriented sockets (e.g., type SOCK_STREAM), an
  1531.           active connection is initiated to the foreign host
  1532.           using name (an address in the name space of the
  1533.           socket;).  When the socket call completes
  1534.           successfully, the socket is ready to send/receive
  1535.           data.
  1536.           
  1537.           For a connectionless socket (e.g., type
  1538.           SOCK_UNREL_DGRAM), the operation performed by
  1539.           WSAConnectEx() is merely to establish a default
  1540.           destination address which will be used on
  1541.           subsequent send() and recv() calls.
  1542.           
  1543.           If the socket, s, is unbound, unique values are
  1544.           assigned to the local association by the system,
  1545.           and the socket is marked as bound.  Note that if
  1546.           the address field of the name structure is all
  1547.           zeroes, WSAConnectEx() will return the error
  1548.           WSAEADDRNOTAVAIL.
  1549.           
  1550.           Parameter g is used to indicate the appropriate
  1551.           actions on socket groups:
  1552.            if g is an existing socket group id, add s to
  1553.                          this group, provided all the requirements
  1554.                          set by this group are met; or
  1555.  
  1556.            if g = SG_UNCONSTRAINED_GROUP, create an
  1557.                           unconstrained socket group and have
  1558.                           s as the first member; or
  1559.  
  1560.            if g = SG_CONSTRAINED_GROUP, create a
  1561.                           constrained socket group and have s as
  1562.                           the first member; or
  1563.  
  1564.            if g = NULL, no group operation is performed.
  1565.  
  1566.           For an unconstrained group, any set of sockets may
  1567.           be grouped together as long as they are supported
  1568.           by a single Service Provider and are connection-
  1569.           oriented.  A constrained socket group requires
  1570.           that connections on all grouped sockets be to the
  1571.           same host.  For newly created socket groups, the
  1572.           new group id can be retrieved by using
  1573.           getsockopt() with option SO_GROUP_ID, if this
  1574.           connect operation completes successfully.
  1575.           
  1576.           lpSFlowspec, and iSFlowspecLen specify a block of
  1577.           memory containing the flow spec for socket s, if s
  1578.           is unidirectional and a DSTREAM type socket.
  1579.           Otherwise, these values are ignored.  The first
  1580.           part of this memory block is struct FLOWSPEC,
  1581.           followed by any Service Provider specific data.
  1582.           Thus, iSFlowspecLen must be larger than or equal
  1583.           to the size of struct FLOWSPEC.  A NULL value for
  1584.           lpSFlowspec indicates no application supplied flow
  1585.           spec.
  1586.           
  1587.           lpGFlowspec, and iGFlowspecLen specify a block of
  1588.           memory containing the flow spec for the socket
  1589.           group to be created, if (and only if) the value of
  1590.           parameter g is SG_CONSTRAINED_GROUP.  Otherwise,
  1591.           these values are ignored.  The first part of this
  1592.           memory block is struct FLOWSPEC, followed by any
  1593.           Service Provider specific data.  Thus,
  1594.           iGFlowspecLen must be larger than or equal to the
  1595.           size of struct FLOWSPEC.  A NULL value for
  1596.           lpGFlowspec indicates no application supplied flow
  1597.           spec.
  1598.  
  1599. Similarly, a WSA version of accept is also proposed.  The
  1600. alert reader will note that the proposed function
  1601. incorporates conditional acceptance as well as grouping.
  1602. Conditional acceptance is discussed in greater detail in our
  1603. proposed extension #9.  The syntax is as follows:
  1604.  
  1605. SOCKET PASCAL FAR WSAAcceptEx ( SOCKET s, struct sockaddr
  1606.           FAR * addr, int FAR * addrlen, FARPROC lpfnCondition );
  1607.           
  1608.           s          A descriptor identifying a socket which
  1609.                     is listening for connections after a
  1610.                     listen().
  1611.           
  1612.           addr      An optional pointer to a buffer which
  1613.                     receives the address of the connecting
  1614.                     entity, as known to the communications
  1615.                     layer.  The exact format of the addr
  1616.                     argument is determined by the address
  1617.                     family established when the socket was
  1618.                     created.
  1619.           
  1620.           addrlen   An optional pointer to an integer which
  1621.                     contains the length of the address addr.
  1622.           
  1623.           lpfnCondition  The procedure instance address of
  1624.                     the application-supplied condition
  1625.                     function which will make an
  1626.                     accept/reject decision based on the
  1627.                     caller information passed in as
  1628.                     parameters, and optionally create and/or
  1629.                     join a socket group by assigning
  1630.                     appropriate value to the result
  1631.                     parameter g of this function.
  1632.  
  1633.           This routine extracts the first connection on the
  1634.           queue of pending connections on s, and checks it
  1635.           against the condition function.  If the condition
  1636.           function returns TRUE, this routine creates a new
  1637.           socket with the same properties as s and returns a
  1638.           handle to the new socket, and then optionally
  1639.           creates and/or joins a socket group based on the
  1640.           value of the result parameter g.  Otherwise,
  1641.           reject this connection request, and proceed to the
  1642.           next one.  If no pending connections are present
  1643.           on the queue, and the socket is not marked as non-
  1644.           blocking, WSAAcceptEx() blocks the caller until a
  1645.           connection is present.  If the socket is marked
  1646.           non-blocking and no pending connections are
  1647.           present on the queue, WSAAcceptEx() returns an
  1648.           error as described below.  The accepted socket may
  1649.           not be used to accept more connections.  The
  1650.           original socket remains open.
  1651.  
  1652.           The prototype of the condition function is as
  1653.           follows:
  1654.           
  1655.        BOOL PASCAL FAR ConditionFunc( const char FAR
  1656.           * caller, int callerlen, GROUP FAR * g);
  1657.           
  1658.           ConditionFunc is a place holder for the
  1659.           application-supplied function name.  The actual
  1660.           condition function must reside in a DLL or
  1661.           application module and be exported in the module
  1662.           definition file.  You must use MakeProcInstance()
  1663.           to get a procedure-instance address for the
  1664.           callback function.  The exact format of the caller
  1665.           parameter is determined by the address family in
  1666.           which the communication is occurring.
  1667.           
  1668.           The result parameter g is assigned within the
  1669.           condition function to indicate the following
  1670.           actions:
  1671.                if g is an existing socket group id, add s to
  1672.           this group, provided all the requirements
  1673.            set by this group are met; or
  1674.  
  1675.           if g = SG_UNCONSTRAINED_GROUP, create an
  1676.                          unconstrained socket group and have
  1677.                          s as the first member; or
  1678.  
  1679.           if g = SG_CONSTRAINED_GROUP, create a constrained
  1680.                           socket group and have s as the first member; or
  1681.           
  1682.           if g = NULL, no group operation is performed.
  1683.  
  1684.           For unconstrained groups, any set of sockets may
  1685.           be grouped together as long as they are supported
  1686.           by a single Winsock Service Provider and are
  1687.           connection-oriented.  A constrained socket group
  1688.           requires that connections on all grouped sockets
  1689.           be to the same host.  For newly created socket
  1690.           groups, the new group id can be retrieved by using
  1691.           getsockopt() with option SO_GROUP_ID, if this
  1692.           connection operation completes successfully.
  1693.           
  1694.           The argument addr is a result parameter that is
  1695.           filled in with the address of the connecting
  1696.           entity, as known to the communications layer.  The
  1697.           exact format of the addr parameter is determined
  1698.           by the address family in which the communication
  1699.           is occurring.  The addrlen is a value-result
  1700.           parameter; it should initially contain the amount
  1701.           of space pointed to by addr; on return it will
  1702.           contain the actual length (in bytes) of the
  1703.           address returned.  This call is used with
  1704.           connection-oriented socket types such as
  1705.           SOCK_STREAM.  If addr and/or addrlen are equal to
  1706.           NULL, then no information about the remote address
  1707.           of the accepted socket is returned.
  1708.  
  1709.  
  1710. In addition to the new connect function, we need a few new
  1711. socket options: SO_GROUP_ID and SO_GROUP_PRIORITY.  The
  1712. group ID option is a get-only value used to discover the ID
  1713. of any group that a particular socket belongs to.  It is
  1714. also the method used to discover the ID of a newly created
  1715. group.  The group priority option is used to establish (or
  1716. discover) the relative priority of a socket within its
  1717. group.  Zero represents the highest priority.
  1718.  
  1719. Finally, we need a way to discover which sockets belong to a
  1720. particular group.  To accomplish this we propose a new
  1721. function: WSAEnumGroup():  The syntax is as follows:
  1722.  
  1723.           int PASCAL FAR WSAEnumGroup ( GROUP g, FARPROC lpfnCallback );
  1724.           
  1725.           g         Specifies the identifier of the socket
  1726.                     group for which membership information
  1727.                     is retrieved.
  1728.           
  1729.           lpfnCallback   Specifies the procedure instance
  1730.                     address of the callback function to be
  1731.                     invoked by Winsock.DLL for each member
  1732.                     socket in the group.
  1733.  
  1734. Remarks   This function is used to enumerate the members in
  1735.           the specified socket group.  It uses the standard
  1736.           Windows enumeration procedure using a "callback"
  1737.           function.  The callback function is called once
  1738.           for each member in the specified socket group.
  1739.           This will be repeated until either the callback
  1740.           function returns zero or the end of the member
  1741.           list has been reached.  On each invocation of the
  1742.           callback function, a "virtual socket" descriptor
  1743.           will be passed in as a parameter.  (For a detailed
  1744.           description of virtual sockets, please see
  1745.           WSADuplicateSocket().)  The value of the virtual
  1746.           socket parameter must either be copied to another,
  1747.           non-transient SOCKET variable and retained across
  1748.           invocations of the callback function, or the
  1749.           virtual socket must be closed prior to returning.
  1750.           Failure to do so will result in a resource leak
  1751.           through lost references to virtual sockets.
  1752.           
  1753.           The prototype of the callback function is as
  1754.           follows:
  1755.           
  1756.                int PASCAL FAR CallbackFunc( SOCKET s );
  1757.           
  1758.           CallbackFunc is a place holder for the application-
  1759.           supplied function name.  The actual callback
  1760.           function must reside in a DLL or application
  1761.           module and be exported in the module definition
  1762.           file.  You must use MakeProcInstance() to get a
  1763.           procedure-instance address for the callback
  1764.           function.  The callback function must return non
  1765.           zero to continue enumeration; to stop enumeration,
  1766.           it must return zero.
  1767.  
  1768.  
  1769. ????
  1770. ????
  1771. From cayman.cayman.com!wayne Thu Feb 17 19:24:01 1994
  1772. Message-Id: <9402180326.AA09470@cuba.Cayman.COM>
  1773. X-Sender: wayne@cuba
  1774. Mime-Version: 1.0
  1775. Content-Type: text/plain; charset="us-ascii"
  1776. Date: Thu, 17 Feb 1994 22:25:33 -0500
  1777. To: martinh@jsbus.com
  1778. From: "Wayne F. Tackabury" <wayne@Cayman.COM>
  1779. Subject: Windows Sockets v.2 Extensions
  1780. X-Mailer: <PC Eudora Version 1.4b18>
  1781. Status: OR
  1782.  
  1783. The calendar on the wall is reminding me that tomorrow is the cutoff date 
  1784. for Winsock v.2 extensions (I also lost the piece of mail which first 
  1785. informed me of this...I recall you're the man to send them to).  I have two 
  1786. in mind, but haven't had time to really develop them...perhaps if you can 
  1787. give me any validation as to their reasonableness (from your objective lofty 
  1788. vantage point :-)) or redundancy relative to already suggested, or shot 
  1789. down, proposed extensions.
  1790.  
  1791. ONE would be a hosts enumeration function.  I am trying to solve two 
  1792. problems here; one, for conventional INET family-targeted applications, is 
  1793. to simply allow a bulk transfer of the hosts information, independent of the 
  1794. underlying static or network services used to retrieve them.  The other is 
  1795. to facilitate Winsock support for protocols which depend heavily on browsing 
  1796. of hierarchical names to retrieve inherently dynamic bound addresses 
  1797. (AppleTalk comes to mind).
  1798.  
  1799. The trick (which I've not yet completely solved beyond the following) is to 
  1800. have an argument to WSAAsyncGetHostList() which would describe the hierarchy 
  1801. context for lookup.  In the case of INET, this is an array of strings 
  1802. constraining a DNS zone, NIS domain, or whathaveyou; in the case of 
  1803. AppleTalk it represents a three level array string which would constrain or 
  1804. wildcard the AppleTalk NBP name, type, and zone.  Hence
  1805.  
  1806. WSAAsyncGetHostList( HWND hWnd,  // Window handle for notification
  1807.                    unsigned int wMsg, // message for notification
  1808.                    const char far **nameContext, /* Array of string pointers
  1809.                                                    describing hierarchical
  1810.                                                    context for lookup, address
  1811.                                                    family-specific */
  1812.                    char far *buf,       // buffer for return info
  1813.                    int  buflen)         // Buffer length, in hostent structs
  1814.  
  1815.  
  1816. Return of WSAENOBUFS would return actually received number of matching 
  1817. hostents in lparam, allowing the application to adjust amount of buffering 
  1818. allocated for return.  After a bunch of time with protocol-general ways of 
  1819. envisioning FindFirst/FindNext-style "next entry index", or dealing with the 
  1820. arduous AppleTalk-style "here's my list of hosts I've already heard from, 
  1821. only give me ones not in this list" interface semantics, I have come to the 
  1822. conclusion that the best, albeit less performance-friendly, way of dealing 
  1823. with this is to let the application worry about it.
  1824.  
  1825. I'd be very very suprised if this proposal hasn't been raised somewhere
  1826. before.
  1827.  
  1828. TWO, I've only started thinking about in the last day or two...it would 
  1829. involve allowing a calling application to set the network protocol address 
  1830. of an interface. One could either have a straight sethostaddr() function, or 
  1831. tie it into a more general non-socket ioctl() function; to solve what I'm 
  1832. trying to solve, you don't need the latter necessarily (to set subnet 
  1833. address, max datagram size, etc. system wide; but then again, I'm not trying 
  1834. to write a generalized DHCP client).
  1835.  
  1836. If you've used PPP, you can see the problem I'm getting at here; unless the 
  1837. PPP client is part of a monolithic TCP kernel, there is no way to allow 
  1838. server-assigned interface adddresses directly...so near as I can tell, 
  1839. people are forcing the issue by using bootp and rarp where they aren't 
  1840. really called for.  This would provide common semantics for configuration of 
  1841. interfaces for service without providing their known addresses.
  1842.  
  1843. Anyways, I've waxed on long enough with content of dubious originality and 
  1844. value...if you think there's value in pursuing this, let me know how you are 
  1845. planning to bring these kinds of proposals to the list, and I'll hack more 
  1846. complete prototypes together.
  1847.  
  1848. Thanks,
  1849.  
  1850. Wayne
  1851.  
  1852. ----------------------------------
  1853.  
  1854. There is such a fine line between genius and stupidity. 
  1855.                                -- Nigel Tufnel, *Spinal Tap*
  1856.  
  1857. Wayne F. Tackabury                       Cayman Systems, Inc.          
  1858. 400 Unicorn Park Dr., Woburn MA  01801   Internet: wayne@cayman.com
  1859. Voice: (617) 932-1100                    Fax: (617) 932-0853
  1860. CompuServe: 73207,3650                   AppleLink: D0523
  1861.  
  1862. ????
  1863. ????
  1864. From relay1.uu.net!netmanage.com!tmima Fri Feb 18 11:51:11 1994
  1865. Message-Id: <Chameleon.940218125848.tmima@tmima2.netmanage.com>
  1866. Date: Fri, 18 Feb 94 12:54:20 PST
  1867. Reply-To: Tmima Koren <tmima@netmanage.com>
  1868. From: Tmima Koren <tmima@netmanage.com>
  1869. To: martinh@jsbus.com
  1870. Subject: Windows Sockets 2 Contribution
  1871. Status: OR
  1872.  
  1873.  
  1874. sethostent()
  1875. gethostent()
  1876. endhostent()
  1877.  
  1878. setprotoent()
  1879. getprotoent()
  1880. endprotoent()
  1881.  
  1882. setservent()
  1883. getservent()
  1884. endservent()
  1885.  
  1886. ????
  1887. ????
  1888. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Fri Feb 18
  1889. 13:31:23 1994
  1890. Date: Fri, 18 Feb 94 13:38:01 PST
  1891. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  1892. Message-ID: <940218133801_1@ccm.hf.intel.com>
  1893. To: martinh@jsbus.com
  1894. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  1895. Subject: Input for Winsock Ver 2
  1896. Status: OR
  1897.  
  1898.  
  1899. Text item: Text_1
  1900.  
  1901.                                                     02/18/94
  1902. Dear Martin,
  1903.  
  1904. Intel is pleased to supply the following input to the Winsock 2
  1905. definition process. There are 10 proposals in all, with this submittal
  1906. corresponding to proposal number 8. 
  1907.  
  1908. -------> IMPORTANT NOTE: <-------------------
  1909. Because of limitiations in the somewhat brain-dead
  1910. mailer I am using, this submittal is being broken up into two pieces.
  1911. Please merge them back together when both pieces arrive.  This is part
  1912. 1 of 2 pieces which comprise submittal #8.
  1913.  
  1914.  
  1915. Regards,
  1916.  
  1917. David B. Andersen
  1918. Intel Architecture Labs
  1919.  
  1920.  
  1921. Extension #8:
  1922.      Quality of service specification
  1923.  
  1924. Description:
  1925. As alluded to in our proposed extension # 7, applications
  1926. need a way to specify required quality of service levels
  1927. (QOS) for sockets and socket groups.  We feel strongly that
  1928. a mechanism for specifying QOS in Winsock QOS should be
  1929. compatible with corresponding work being done under the
  1930. auspices of the IETF.  RFC 1363 proposes a QOS specification
  1931. mechanism referred to as a flow spec. We have based our
  1932. proposal for how QOS should be specified at the API level on
  1933. the flow spec concept.
  1934.  
  1935. A brief overview of this concept is as follows:  Flow specs
  1936. describe a set of characteristics about a proposed
  1937. connection-oriented, unidirectional flow through the
  1938. network.  An application may associate a flow spec with a
  1939. socket at the time a connection request is made.  This flow
  1940. spec indicates parametrically what level of service is
  1941. required and also stipulates how flexible the application is
  1942. willing to be if the requested level of service is not
  1943. available.  (This ranges from "don't make a connection if I
  1944. don't get all that I asked for", to "here is what I would
  1945. like but I'll take anything I can get".)  After a connection
  1946. is established, the application may retrieve the flow spec
  1947. associated with the socket and examine its contents to
  1948. discover the level of service that the network is willing
  1949. and/or able to provide.  If the service provided is not
  1950. acceptable, the application may close the socket and take
  1951. whatever action is appropriate (e.g. scale back and ask for
  1952. a lower quality of service, try again later, notify the user
  1953. and exit, etc.)
  1954.  
  1955. Even after a flow is established, conditions in the network
  1956. may change resulting in a reduction (or increase) in the
  1957. available service level.  A notification mechanism is
  1958. included which utilizes the existing (and proposed) Winsock
  1959. notification techniques to indicate to the application that
  1960. QOS levels have changed.  The app should again retrieve the
  1961. corresponding flow spec and examine it in order to discover
  1962. what aspect of the service level has changed.
  1963.  
  1964. Semantics:
  1965. The basic QOS mechanism proposed for Winsock revolves around
  1966. the flow specification (or "flow spec") as described by
  1967. Craig Partridge in RFC 1361, dated September 1992.  Flow
  1968. specs provide a parametric representation of key QOS
  1969. characteristics.  Winsock's notion of a flow spec is a
  1970. backwards compatible extension of that defined in RFC 1363.
  1971. Applications use flow specs to indicate their service
  1972. requirements, and networks use flow specs to indicate QOS
  1973. availability.  Flow specs divide QOS characteristics into
  1974. the following general areas:
  1975.  
  1976. 1.Network bandwidth utilization - The manner in which the
  1977.   application's traffic will be injected into the network.
  1978.   This includes specifications for average bandwidth
  1979.   utilization, maximum burst duration and peak burst rate.
  1980.   It also includes an indication which the network may
  1981.   provide of minimum link bandwidth (i.e. how wide the
  1982.   skinniest pipe is between the two hosts).
  1983.  
  1984. 2.Sensitivity to delay - Applications indicate a delay or
  1985.   latency value as a target for the network, with an
  1986.   understanding that further reductions in delay below this
  1987.   value are of marginal use to the application.  A means is
  1988.   also provided to stipulate the maximum amount of delay
  1989.   variation that can be tolerated.
  1990.  
  1991. 3.Willingness to cope with data loss and service
  1992.   interruption - Loss properties are expressed in terms of
  1993.   both overall percentage of lost packets and maximum
  1994.   amounts of bursty loss.  Service interruption indicates
  1995.   how long the application is willing to tolerate loss of
  1996.   all communication with the endpoint before considering
  1997.   the connection broken.
  1998.  
  1999. 4.Level of service guarantee -  Applications are able to
  2000.   indicate a range of requirements, from the need for an
  2001.   ironclad guarantee to a willingness to accept whatever is
  2002.   available after merely expressing a hint about QOS
  2003.   preferences.
  2004.  
  2005. 5.Flow content identification - Applications may select
  2006.   from a wide selection of well-known constants to identify
  2007.   the media content of a flow.
  2008.  
  2009. 6.Cost sensitivity - An indication of how willing the
  2010.   application is to minimize communications cost to the
  2011.   possible detriment of other QOS parameters.
  2012.  
  2013. 7.Communications security - Applications may specify a
  2014.   particular encryption system or option and identify
  2015.   public keys to be used
  2016.  
  2017. Flow specs are only applicable to DSTREAM style sockets
  2018. which are  unidirectional (either inbound or outbound).  An
  2019. application indicates its desire for a non-default flow spec
  2020. at the time a connection request is made.  Since
  2021. establishing a flow spec'd connection is likely to involve
  2022. cooperation and/or negotiation between intermediate routers
  2023. and hosts, the results of a flow spec request cannot be
  2024. determined until after the connection operation is fully
  2025. completed.  After this time, the application may use
  2026. getsockopt() to retrieve the resulting flow spec structure
  2027. so that it can determine what the network was willing and/or
  2028. able to supply.
  2029.  
  2030. Also, it is entirely possible that QOS conditions may change
  2031. during the life of a connection.  A means is provided,
  2032. therefore, for a service provider to notify the application
  2033. that it should access and inspect the current flow spec
  2034. which will have one or more modified values.
  2035.  
  2036. The Flow Spec Structure
  2037.  
  2038. The proposed flow spec structure is defined as follows.
  2039. Portions of the comment fields shown in italics indicate the
  2040. corresponding flow spec field identifier as found in RFC
  2041. 1363.
  2042.  
  2043.           typedef struct FlowSpec {
  2044.           int   iMaxMsgSize;            // MTU: Max message size: bytes
  2045.           float fAvgBw;                 // Token Bucket Rate: bytes/sec
  2046.           float fBurstLength;           // Token Bucket Size: bytes
  2047.           float fBurstRate;         // Max Trans Rate: bytes/sec
  2048.           float fMinLinkSpeed           // Size of thinnest pipe: bytes/sec
  2049.                   int   iConnectionStatus       // Status of the connection
  2050.           int   iMinDelaySel;           // Minimum Delay Noticed:
  2051.           float fMinDelayValue;     // Delay value: usec
  2052.           float fMaxDelayVariation; // Max Delay Variation: usec
  2053.           int   iLossSensitivity;   // Loss Sensitivity:
  2054.           float fMaxLostPkts;           // Max # lost MTU's over...
  2055.           float fLossInterval;      // Loss Interval in MTU's
  2056.           float fMaxBurstLoss;      // Burst Loss Sensitivity
  2057.                                         // max # consec. lost MTU's
  2058.           int   iMaxSvcOutage;      // Max dur for svc outage: sec
  2059.           int   iQualOfGuarantee;   // Quality of Guarantee
  2060.           int   iFlowContent;           // flow content identifier
  2061.           int   iCostSensitivity;   // Cost sensitivity
  2062.           int   iEncryptionSel;     // Selected encryption algo
  2063.           char far *lpEncryptionKey; // Pointer to desired key
  2064.           } FLOWSPEC;
  2065.           
  2066.           
  2067. The sections which follow provide a detailed description of
  2068. each field in the flow spec.
  2069.  
  2070. iMaxMsgSize
  2071.  
  2072. This field corresponds to the Maximum Transmission Unit
  2073. field in RFC 1363.  It describes the maximum sized message
  2074. (in bytes) that the application intends to send over the
  2075. flow.  This must, of course, be no larger than the value of
  2076. SO_MAX_DG_SIZE for the underlying service provider.  The
  2077. intent of expressing this value in the flow spec is not to
  2078. provide a hard limit for the application.  Rather, it serves
  2079. two different purposes.
  2080.  
  2081. First, it is a convenient unit for expressing loss
  2082. properties.  Using the default MTU of the internetwork is
  2083. inappropriate since the internetwork may have a very large
  2084. MTU, such as the 64 Kbytes of IP, but applications and hosts
  2085. may be sensitive to losses of far less than an MTU's amount
  2086. of data. For example, a voice application would be sensitive
  2087. to a loss of several consecutive small packets.
  2088.  
  2089. Secondly, the MTU also bounds the amount of time that a flow
  2090. can transmit, uninterrupted, on a shared media.  Similarly,
  2091. the loss rates of links that suffer bit errors will vary
  2092. dramatically based on the MTU size.
  2093.  
  2094. fAvgBw
  2095.  
  2096. This field corresponds to the Token Bucket Rate field in RFC
  2097. 1363.  It is one of three fields used to define how traffic
  2098. will be injected into the internetwork by the sending
  2099. application.
  2100.  
  2101. As flow specs are based upon the well-known leaky bucket
  2102. algorithm for flow control, this field and several others
  2103. are described in terms of imaginary tokens and buckets.  The
  2104. token rate is the rate at which tokens (credits) are placed
  2105. into an imaginary token bucket, expressed in bytes/second.
  2106. For each flow, a separate bucket is maintained.  To send a
  2107. packet over the flow, a host must remove a number of credits
  2108. equal to the size of the packet from the token bucket.  If
  2109. there are not enough credits, the host must wait until
  2110. enough credits accumulate in the bucket.
  2111.  
  2112. Note that the fact that the rate is expressed in terms of a
  2113. token bucket rate does not mean that hosts must implement
  2114. token buckets. Any traffic management scheme that yields
  2115. equivalent behavior is permitted.
  2116.  
  2117. The field indicates the number of byte credits (i.e., right
  2118. to send a byte) per second which are deposited into the
  2119. token bucket.  The value zero is slightly special.  It is used to 
  2120. indicate that the application is not making a request for bandwidth
  2121. guarantees. If this field is zero, then the fBurstLength
  2122. field must also be zero, and the type of guarantee requested
  2123. may be no higher than predicted service (explained below).
  2124.  
  2125. fBurstLength
  2126.  
  2127. This field corresponds to the Token Bucket Size field in RFC
  2128. 1363.  It controls the maximum amount of data that the flow
  2129. can send at the peak rate, and is expressed in terms of
  2130. bytes.  More formally, if the burst length is B, and the
  2131. average rate is R, over any arbitrarily chosen interval T in
  2132. the life of the flow, the amount of data that the flow sends
  2133. cannot have exceeded B + (R * T) bytes.
  2134.  
  2135. The imaginary token bucket is filled at the token bucket
  2136. rate.  The bucket size (or burst length) limits how many
  2137. credits the flow may store.  When the bucket is full, new
  2138. credits are discarded.
  2139.  
  2140. The field is ignored if the fAvgBw field is zero.  Note that
  2141. fBurstLength must be greater than or equal to iMaxMsgSize.
  2142. Zero is a legal value for the field and indicates that no
  2143. credits are saved.
  2144.  
  2145. fBurstRate
  2146.  
  2147. This field corresponds to the Maximum Transmission Rate
  2148. field in RFC 1363, and is expressed in bytes/second.  This
  2149. rate limits how fast packets may be sent back to back from
  2150. the host.  Consider that if the token bucket is full, it is
  2151. possible for the flow to send a series of back-to-back
  2152. packets, with the length of this run equal to the size of
  2153. the token bucket (fBurstLength).  If the token bucket size
  2154. is large, this back-to-back run may be long enough to
  2155. significantly inhibit multiplexing.  To limit this effect,
  2156. fBurstRate bounds how fast successive packets may be placed
  2157. on the network.
  2158.  
  2159. One can think of fBurstRate  as being a form of a leaky
  2160. bucket.  When a packet is sent, a number of credits equal to
  2161. the size of the packet is placed into an empty bucket, which
  2162. drains credits at the burst rate.  No more packets may be
  2163. sent until the bucket has emptied again.
  2164.  
  2165. fMinLinkSpeed
  2166.  
  2167. This field is an extension to the RFC 1363 flow spec, and is
  2168. expressed in bytes/second.  It is provided as a way for the
  2169. network to supply useful information to the application.
  2170.  
  2171. After a connection has been established, an application may
  2172. examine this field in order to determine the capacity
  2173. limitations of the underlying hops which the connection
  2174. spans.  All such hops will have a capacity greater than or
  2175. equal to fMinLinkSpeed.  
  2176.  
  2177. A typical way for an application to use this field would be to
  2178. initiate a connection requesting the lowest possible level of service.
  2179. Once the connection is established, the app may then determine that higher
  2180. levels of service are likely possible.  It may then elect to either
  2181. modify its use of the socket or perhaps trade its current socket in on
  2182. one with a higher level of service.
  2183.  
  2184. A value of zero implies that this information is not
  2185. available from the network. This field is undefined for
  2186. unconnected sockets.
  2187.  
  2188. iConnectionStatus
  2189.  
  2190. This field is an extension to the RFC 1363 flow spec.  It is provided
  2191. as a way for the network to indicate a change in the connection status
  2192. to the application using one of the following manifest constants as 
  2193. values: OPERATIONAL,  INTERRUPTED, or SUSPENDED.  Typical scenarios
  2194. might include: connection status on our cellular modem link changes 
  2195. to INTERRUPTED because our car just drove into a tunnel, and then 
  2196. changes back to OPERATIONAL when we come out the other side.  Later 
  2197. on, connection status changes to SUSPENDED because we are going into 
  2198. power conservation mode.  The availability of connection status may be 
  2199. especially useful for situations where the iMaxSvcOutage value 
  2200. is fairly long.
  2201.  
  2202. A value of UNKNOWN implies that this information is not available 
  2203. from the network. This field is undefined for unconnected sockets.
  2204.  
  2205. ----------  End of Part 1  ------ Continued in Part 2  ---------
  2206.  
  2207.  
  2208. ????
  2209. ????
  2210. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Fri Feb 18
  2211. 13:32:28 1994
  2212. Date: Fri, 18 Feb 94 13:39:08 PST
  2213. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  2214. Message-ID: <940218133908_3@ccm.hf.intel.com>
  2215. To: martinh@jsbus.com
  2216. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  2217. Subject: Input for Winsock Ver 2
  2218. Status: OR
  2219.  
  2220.  
  2221. Text item: Text_1
  2222.  
  2223.                                                     02/18/94
  2224. Dear Martin,
  2225.  
  2226. This is part 2 of 2 pieces which comprise our submittal #8.
  2227.  
  2228. Because of limitiations in the somewhat brain-dead
  2229. mailer I am using, this submittal is being broken up into two pieces.
  2230. Please merge them back together when both pieces arrive.  
  2231.  
  2232.  
  2233. Regards,
  2234.  
  2235. David B. Andersen
  2236. Intel Architecture Labs
  2237.  
  2238. ------------ Begin Part 2 of Submittal #8  -----------------------
  2239.  
  2240. iMinDelaySel and fMinDelayValue
  2241.  
  2242. These two fields both map to the Minimum Delay Noticed field
  2243. in RFC 1363.  Winsock uses two fields because in the RFC the
  2244. corresponding value may either be one of a set of manifest
  2245. constants or a floating point number.  The iMinDelaySel
  2246. field is used to represent the manifest constant, and, if
  2247. applicable, the fMinDelayValue field is used to store the
  2248. floating point value in microseconds.
  2249.  
  2250. The minimum delay noticed field tells the internetwork that
  2251. the host and application are effectively insensitive to
  2252. improvements in end-to-end delay below this value.  The
  2253. network is encouraged to drive the delay down to this value
  2254. but need not try to improve the delay further.
  2255.  
  2256. If expressed as a number it is the number of microseconds of
  2257. delay below which the host and application do not care about
  2258. improvements.  Human users only care about delays in the
  2259. millisecond range but some applications will be computer to
  2260. computer and computers now have clock times measured in a
  2261. handful of nanoseconds.  For such computers, microseconds
  2262. are an appreciable time.  For this reason, this field
  2263. measures in microseconds, even though that may seem small.
  2264.  
  2265. Manifest constants for iMinDelaySel are as follows:
  2266.  
  2267.   NO_DELAY_SENSITIVITY  -- the application is not sensitive
  2268.   to delay
  2269.  
  2270.   MODERATE_DELAY_SENSITIVITY -- the application is
  2271.   moderately delay sensitive (e.g., avoid satellite links
  2272.   where possible)
  2273.  
  2274.   NUMERIC_DELAY_SENSITIVITY -- the application is sensitive
  2275.   to delay as expressed in fMinDelayValue
  2276.  
  2277. fMaxDelayVariation
  2278.  
  2279. This field corresponds to the Maximum Delay Variation field
  2280. in RFC 1361. It is the difference, in microseconds, between
  2281. the maximum and minimum possible delay that a packet will
  2282. experience.  If a receiving application requires data to be
  2283. delivered in the same pattern that the data was transmitted,
  2284. it may be necessary for the receiving host to briefly buffer
  2285. data as it is received so that the receiver can restore the
  2286. old transmission pattern.  (An easy example of this is a
  2287. case where an application wishes to send and transmit data
  2288. such as voice samples, which are generated and played at
  2289. regular intervals.  The regular intervals may be distorted
  2290. by queuing effects in the network and the receiver may have
  2291. to restore the regular spacing.)
  2292.  
  2293. The amount of buffer space that the receiving host is
  2294. willing to provide determines the amount of variation in
  2295. delay permitted for individual packets within a given flow.
  2296. The maximum delay variation field makes it possible to tell
  2297. the network how much variation is permitted.
  2298.  
  2299. The value of 0, meaning the receiving host will not buffer
  2300. out delays, is acceptable but the receiving host must still
  2301. have enough buffer space to receive a maximum transmission
  2302. unit sized packet from the sending host.  Note that it is
  2303. expected that a value of 0 will make it unlikely that a flow
  2304. can be established.
  2305.  
  2306. iLossSensitivity, fMaxLostPkts and fLossInterval
  2307.  
  2308. These fields together correspond to the Loss Sensitivity and
  2309. Loss Interval fields in the RFC. iLossSensitivity takes on
  2310. one of the following well-known values:
  2311.  
  2312.   NO_LOSS_SENSITIVITY -- The application is not sensitive
  2313.   to loss, relying on higher level protocols if needed.
  2314.  
  2315.   SOME_LOSS_SENSITIVITY -- The application is sensitive to
  2316.   loss but is not specifying a numeric requirement.  Where
  2317.   possible, the network should choose a path with minimal
  2318.   loss.
  2319.  
  2320.   NUMERIC_LOSS_SENSITIVITY -- The application requires that
  2321.   loss characteristics be as described in fMaxLostPkts and
  2322.   fLossInterval.
  2323.  
  2324. fMaxLostPkts specifies the maximum number of MTU sized
  2325. packets that may be lost over an interval during which
  2326. fLossInterval MTU sized packets were sent.  Thus, taken
  2327. together, these values specify an average loss percentage.
  2328.  
  2329. fMaxBurstLoss
  2330.  
  2331. This field corresponds to the Burst Loss Sensitivity field
  2332. in the RFC. It states how sensitive the application's flow
  2333. is to losses of consecutive packets.  The field enumerates
  2334. the maximum number of consecutive MTU-sized packets that may
  2335. be lost.  A value of zero indicates that the flow is
  2336. insensitive to burst loss.
  2337.  
  2338. Note that it is permissible to set the iLossSensitivity
  2339. field to simply indicate some sensitivity to loss, and set a
  2340. numerical limit on the number of consecutive packets that
  2341. can be lost.
  2342.  
  2343. iMaxSvcOutage
  2344.  
  2345. This field represents an extension to the RFC flow spec.  It
  2346. indicates to the network a time interval, expressed in
  2347. seconds (not microseconds), during which communications over
  2348. the connection may be interrupted without considering the
  2349. connection to be permanently broken.  A value of zero
  2350. indicates no preference on behalf of the application, and
  2351. that the underlying service provider's default value should
  2352. be used.
  2353.  
  2354. iQualOfGuarantee
  2355.  
  2356. This field corresponds to the Quality of Guarantee field in
  2357. the RFC.  It is expected that the internetwork will likely
  2358. have to offer more than one type of guarantee.  There are
  2359. two unrelated issues related to guarantees.
  2360.  
  2361. First, it may not be possible for the internetwork to make a
  2362. firm guarantee.  Consider a path through an internetwork in
  2363. which the last hop is an Ethernet.  Experience has shown
  2364. (e.g., some of the IETF conferencing experiments) that an
  2365. Ethernet can often give acceptable performance, but clearly
  2366. the internetwork cannot guarantee that the Ethernet will not
  2367. saturate at some time during a flow's lifetime.  Thus it
  2368. must be possible to distinguish between flows which cannot
  2369. tolerate the small possibility of a failure (and thus must
  2370. guaranteed at every hop in the path) and those that can
  2371. tolerate islands of uncertainty.
  2372.  
  2373. Second, it is presumed that some applications will be able
  2374. to adapt to modest variations in internetwork performance
  2375. and that network designers can exploit this flexibility to
  2376. allow better network utilization.  In this model, the
  2377. internetwork would be allowed to deviate slightly from the
  2378. promised flow parameters during periods of load.  This class
  2379. of service is called predicted service (to distinguish it
  2380. from guaranteed service).
  2381.  
  2382. The difference between predicted service and service which
  2383. cannot be perfectly guaranteed (e.g., the Ethernet example
  2384. mentioned above) is that the imperfect guarantee makes no
  2385. statistical promises about how it might misbehave.  In the
  2386. worst case, the imperfect guarantee will not work at all,
  2387. whereas predicted service will give slightly degraded
  2388. service.  Note too that predicted service assumes that the
  2389. routers and links in a path all cooperate (to some degree)
  2390. whereas an imperfect guarantee states that some routers or
  2391. links will not cooperate.
  2392.  
  2393. There are six legal values:
  2394.  
  2395.   NO_GUARANTEE - no guarantee is required (the host is
  2396.   simply expressing desired performance for the flow).
  2397.  
  2398.   IMPERFECT_GUARANTEE_REQUESTED - an imperfect guarantee is
  2399.   requested.
  2400.  
  2401.   PREDICTED_SVC_REQUIRED - predicted service is requested
  2402.   and if unavailable, then no flow should be established.
  2403.  
  2404.   PREDICTED_SVC_REQUESTED - predicted service is requested
  2405.   but an imperfect guarantee is acceptable.
  2406.  
  2407.   GUARANTEED_SVC_REQUIRED - guaranteed service is requested
  2408.   and if a firm guarantee cannot be given, then no flow
  2409.   should be established.
  2410.  
  2411.   GUARANTEED_SVC_REQUESTED - guaranteed service is
  2412.   requested and but an imperfect guarantee is acceptable.
  2413.  
  2414. Application developers should realize that asking for
  2415. predicted service or permitting an imperfect guarantee will
  2416. substantially increase the chance that a flow request will
  2417. be accepted.
  2418.  
  2419. iFlowContent
  2420.  
  2421. This field represents an extension over the flow spec
  2422. defined in the RFC.  The allowed values are all manifest
  2423. constants which indicate the type of media being transported
  2424. over the flow.  Use of this field is optional.  Its purpose is
  2425. to provide a simplified alternative to specifying QOS 
  2426. parametrically.  For service providers that are "tuned" to 
  2427. transport certain types of media, merely identifying the socket
  2428. as bearing a reconginzed media type may be sufficient to
  2429. identify needed QOS levels.
  2430.  
  2431. Currently defined values include
  2432.   UNSPECIFIED
  2433.   GSM_AUDIO
  2434.   ADPCM_AUDIO
  2435.   (TBD other types of audio streams)
  2436.   INDEO_PRV
  2437.   INDEO_ISV
  2438.   INDEO_MRV
  2439.   H261
  2440.   MPEG1
  2441.   MPEG2
  2442.   (TBD other types of video stream)
  2443.   SVC_PROVIDER_SPECIFIC - service providers are free to
  2444.   define their own constants for media streams with values
  2445.   greater than or equal to this.
  2446.  
  2447. iCostSensitivity
  2448.  
  2449. This field represents an extension over the flow spec
  2450. defined in the RFC.  The allowed values are manifest
  2451. constants which indicate whether or not the application
  2452. wishes to minimize any costs associated with a connection to
  2453. the possible detriment of other QOS parameters.  Allowed
  2454. values are:
  2455.  
  2456.   NOT_COST_SENSITIVE - the application considers cost to be
  2457.   a secondary concern or no concern at all.
  2458.  
  2459.   COST_SENSITIVE - the application considers cost to be a
  2460.   primary concern and wishes to minimize it where possible.
  2461.  
  2462. iEncryptionSel and lpEncryptionKey
  2463.  
  2464. These fields represents an extension over the flow spec
  2465. defined in the RFC.  They are used to indicate the
  2466. application's choice for encryption algorithms (if any) and
  2467. also to specify a pointer to where an encryption key may be
  2468. found.  Interpretation of the memory contents pointed to by
  2469. the encryption key pointer is service provider/encryption
  2470. algorithm specific.  Values for the iEncryptionSel field are
  2471. also service provider specific, with the convention that
  2472. zero is used to indicate that no encryption is being
  2473. requested.
  2474.  
  2475. Default Flow Spec
  2476.  
  2477. A default flow spec is associated with each eligible socket
  2478. at the time it is created.  Field values for this default
  2479. flow spec are indicated below.  In all cases these values
  2480. indicate that no particular flow characteristics are being
  2481. requested from the network.  Applications only need to
  2482. modify values for those fields that they are interested in,
  2483. but must be aware that there exists some coupling between
  2484. fields as was described above.
  2485.  
  2486. iMaxMsgSize =       SO_MAX_DG_SIZE for the particular service provider
  2487. fAvgBw =                0, no bandwidth request
  2488. fBurstLength =      0, not applicable because fAvgBw is zero
  2489. fBurstRate =        0, not applicable because fAvgBw is zero
  2490. fMinLinkSpeed =     supplied by network, undefined until connection occurs
  2491. iConnectionStatus=  supplied by network, undefined until connection occurs
  2492. iMinDelaySel =      NO_DELAY_SENSITIVITY
  2493. fMinDelayValue =    0, not applicable
  2494. fMaxDelayVariation =0, not applicable
  2495. iLossSensitivity =  NO_LOSS_SENSITIVITY
  2496. fMaxLostPkts =      0, not applicable
  2497. fLossInterval =     0, not applicable
  2498. iMaxSvcOutage =     0, use provider defaults for time-out
  2499. iQualOfGuarantee =  NO_GUARANTEE
  2500. iFlowContent =      UNSPECIFIED
  2501. iCostSensitivity =  NOT_COST_SENSITIVE
  2502. iEncryptionSel =    0, no encryption requested
  2503. lpEncryptionKey =   NULL
  2504.  
  2505.  
  2506. The semantics for associating a flow spec with a socket or
  2507. socket group appeared as part of our proposed extension #7
  2508. on socket groups.  The WSAConnectEx() function which was
  2509. described therein is used.  For the sake of completeness, we
  2510. repeat that function description here.
  2511.  
  2512. int PASCAL FAR WSAConnectEx ( SOCKET s, const struct sockaddr FAR * name,
  2513.           int namelen, GROUP g, char  FAR * lpSFlowspec, int iSFlowspecLen,
  2514.           char FAR * lpGFlowspec, int iGFlowspecLen );
  2515.           
  2516.           s          A descriptor identifying an unconnected
  2517.                     socket.
  2518.           
  2519.           name      The name of the peer to which the socket
  2520.                     is to be connected.
  2521.           
  2522.           namelen   The length of the name.
  2523.           
  2524.           g         The identifier of the socket group.
  2525.           
  2526.           lpSFlowspec    A pointer to the flow spec for
  2527.                     socket s.
  2528.           
  2529.           iSFlowspecLen  The length of the flow spec for
  2530.                     socket s.  It must be larger than or
  2531.                     equal to the size of struct FLOWSPEC.
  2532.           
  2533.           lpGFlowspec    A pointer to the flow spec for the
  2534.                     socket group to be created, if the value
  2535.                     of parameter g is SG_CONSTRAINED_GROUP.
  2536.           
  2537.           iGFlowspecLen  The length of the flow spec for the
  2538.                     socket group to be created, if the value
  2539.                     of parameter g is SG_CONSTRAINED_GROUP.
  2540.                     It must be larger than or equal to the
  2541.                     size of struct FLOWSPEC.
  2542.  
  2543.           This function is used to create a connection to
  2544.           the specified destination.  For connection-
  2545.           oriented sockets (e.g., type SOCK_STREAM), an
  2546.           active connection is initiated to the foreign host
  2547.           using name (an address in the name space of the
  2548.           socket;).  When the socket call completes
  2549.           successfully, the socket is ready to send/receive
  2550.           data.
  2551.           
  2552.           For a connectionless socket (e.g., type
  2553.           SOCK_UNREL_DGRAM), the operation performed by
  2554.           WSAConnectEx() is merely to establish a default
  2555.           destination address which will be used on
  2556.           subsequent send() and recv() calls.
  2557.           
  2558.           If the socket, s, is unbound, unique values are
  2559.           assigned to the local association by the system,
  2560.           and the socket is marked as bound.  Note that if
  2561.           the address field of the name structure is all
  2562.           zeroes, WSAConnectEx() will return the error
  2563.           WSAEADDRNOTAVAIL.
  2564.           
  2565.           Parameter g is used to indicate the appropriate
  2566.           actions on socket groups:
  2567.            if g is an existing socket group id, add s to
  2568.                          this group, provided all the requirements
  2569.                          set by this group are met; or
  2570.  
  2571.            if g = SG_UNCONSTRAINED_GROUP, create an
  2572.                           unconstrained socket group and have
  2573.                           s as the first member; or
  2574.  
  2575.            if g = SG_CONSTRAINED_GROUP, create a
  2576.                           constrained socket group and have s as
  2577.                           the first member; or
  2578.  
  2579.            if g = NULL, no group operation is performed.
  2580.  
  2581.           For an unconstrained group, any set of sockets may
  2582.           be grouped together as long as they are supported
  2583.           by a single Service Provider and are connection-
  2584.           oriented.  A constrained socket group requires
  2585.           that connections on all grouped sockets be to the
  2586.           same host.  For newly created socket groups, the
  2587.           new group id can be retrieved by using
  2588.           getsockopt() with option SO_GROUP_ID, if this
  2589.           connect operation completes successfully.
  2590.           
  2591.           lpSFlowspec, and iSFlowspecLen specify a block of
  2592.           memory containing the flow spec for socket s, if s
  2593.           is unidirectional and a DSTREAM type socket.
  2594.           Otherwise, these values are ignored.  The first
  2595.           part of this memory block is struct FLOWSPEC,
  2596.           followed by any Service Provider specific data.
  2597.           Thus, iSFlowspecLen must be larger than or equal
  2598.           to the size of struct FLOWSPEC.  A NULL value for
  2599.           lpSFlowspec indicates no application supplied flow
  2600.           spec.
  2601.           
  2602.           lpGFlowspec, and iGFlowspecLen specify a block of
  2603.           memory containing the flow spec for the socket
  2604.           group to be created, if (and only if) the value of
  2605.           parameter g is SG_CONSTRAINED_GROUP.  Otherwise,
  2606.           these values are ignored.  The first part of this
  2607.           memory block is struct FLOWSPEC, followed by any
  2608.           Service Provider specific data.  Thus,
  2609.           iGFlowspecLen must be larger than or equal to the
  2610.           size of struct FLOWSPEC.  A NULL value for
  2611.           lpGFlowspec indicates no application supplied flow
  2612.           spec.
  2613.  
  2614. The QOS notification mechanism utilizes the existing
  2615. WSAAsyncSelect() and proposed WSACallbackSelect() functions
  2616. by defining an additional event: FD_QOS.  If an application
  2617. expresses an interest in being notified about QOS events,
  2618. the service provider will utilize the available mechanisms
  2619. to notify the app whenever something in the flow spec has
  2620. changed.
  2621.  
  2622. An application may access the flow spec associated with a
  2623. socket or with the socket's group (if any) by retrieving the
  2624. value of one of the following proposed get-only socket
  2625. options: SO_FLOWSPEC or SO_GROUP_FLOWSPEC.  A returned value
  2626. of NULL indicates that there is no associated flow spec.
  2627.  
  2628. ------------- End of Submittal #8  -----------------------------
  2629.  
  2630. ????
  2631. ????
  2632. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Fri Feb 18
  2633. 13:32:51 1994
  2634. Date: Fri, 18 Feb 94 13:39:17 PST
  2635. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  2636. Message-ID: <940218133917_5@ccm.hf.intel.com>
  2637. To: martinh@jsbus.com
  2638. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  2639. Subject: Input for Winsock Ver 2
  2640. Status: OR
  2641.  
  2642.  
  2643. Text item: Text_1
  2644.  
  2645.                                                     02/18/94
  2646. Dear Martin,
  2647.  
  2648. Intel is pleased to supply the following input to the Winsock 2
  2649. definition process. There are 10 proposals in all, with this submittal
  2650. corresponding to proposal number 9.
  2651.  
  2652. For each of our proposals we supply a desciption of the proposed
  2653. extension, our motivations for making the extension proposal, and the
  2654. detailed syntax for how the extension might be implemented.
  2655.  
  2656. We would also like to volunteer our services to assist in the process
  2657. of collating and summarizing the various submitals that are coming in
  2658. from Forum members.  Please let us know how we can best assist you in
  2659. this process.
  2660.  
  2661. Regards,
  2662.  
  2663. David B. Andersen
  2664. Intel Architecture Labs
  2665.  
  2666.  
  2667. Extension #9:
  2668.      Conditional acceptance of socket connection requests
  2669.  
  2670. Description:
  2671. The current Winsock specification does not provide a way for
  2672. an application with a listening socket to conditionally
  2673. accept an incoming connection request based upon the
  2674. requester's address.  (In other words, Winsock has no
  2675. equivalence to caller ID.)  This is curious since the
  2676. current Winsock spec includes an error code for the
  2677. connect() function which indicates that the connection
  2678. attempt was rejected, but does not provide a mechanism that
  2679. allows a listening application to cause this rejection to
  2680. occur.  Currently, the only viable option is for the
  2681. listening app to accept the connection, use getpeername() to
  2682. establish the caller's ID and then immediately close the
  2683. socket.  The caller may well begin sending as soon as the
  2684. connection is accepted, and will probably not understand why
  2685. the connection was suddenly closed.
  2686.  
  2687. We propose to remedy this by making it possible for an
  2688. application to discover who is wanting to connect prior to
  2689. accepting the request, and by allowing the app to reject the
  2690. request if it decides to.
  2691.  
  2692. Motivation:
  2693. Most other transport level interfaces have such a feature.
  2694. It's usefulness is, I think, obvious.
  2695.  
  2696. Semantics:
  2697. In our proposed extension #7 on socket groups we introduced
  2698. the proposed WSAAcceptEx() function as a means to performing
  2699. grouping of sockets.  This same function is also used for
  2700. conditional acceptance.  The basic approach is to allow the
  2701. app to specify a conditional acceptance function that is
  2702. called incident to the invocation of WSAAcceptEx().  The
  2703. inbound parameter  identifies the address of the requester.
  2704. The return value indicates whether the connection is to be
  2705. accepted or rejected.  As noted previously, the application
  2706. may also utilize this function to establish the new socket
  2707. as a group member.  We repeat the syntax for the
  2708. WSAAcceptEx() function below:
  2709.  
  2710. SOCKET PASCAL FAR WSAAcceptEx ( SOCKET s, struct sockaddr
  2711.           FAR * addr, int FAR * addrlen, FARPROC lpfnCondition );
  2712.           
  2713.           s          A descriptor identifying a socket which
  2714.                     is listening for connections after a
  2715.                     listen().
  2716.           
  2717.           addr      An optional pointer to a buffer which
  2718.                     receives the address of the connecting
  2719.                     entity, as known to the communications
  2720.                     layer.  The exact format of the addr
  2721.                     argument is determined by the address
  2722.                     family established when the socket was
  2723.                     created.
  2724.           
  2725.           addrlen   An optional pointer to an integer which
  2726.                     contains the length of the address addr.
  2727.           
  2728.           lpfnCondition  The procedure instance address of
  2729.                     the application-supplied condition
  2730.                     function which will make an
  2731.                     accept/reject decision based on the
  2732.                     caller information passed in as
  2733.                     parameters, and optionally create and/or
  2734.                     join a socket group by assigning
  2735.                     appropriate value to the result
  2736.                     parameter g of this function.
  2737.  
  2738.           This routine extracts the first connection on the
  2739.           queue of pending connections on s, and checks it
  2740.           against the condition function.  If the condition
  2741.           function returns TRUE, this routine creates a new
  2742.           socket with the same properties as s and returns a
  2743.           handle to the new socket, and then optionally
  2744.           creates and/or joins a socket group based on the
  2745.           value of the result parameter g.  Otherwise,
  2746.           reject this connection request, and proceed to the
  2747.           next one.  If no pending connections are present
  2748.           on the queue, and the socket is not marked as non-
  2749.           blocking, WSAAcceptEx() blocks the caller until a
  2750.           connection is present.  If the socket is marked
  2751.           non-blocking and no pending connections are
  2752.           present on the queue, WSAAcceptEx() returns an
  2753.           error as described below.  The accepted socket may
  2754.           not be used to accept more connections.  The
  2755.           original socket remains open.
  2756.  
  2757.           The prototype of the condition function is as
  2758.           follows:
  2759.           
  2760.        BOOL PASCAL FAR ConditionFunc( const char FAR
  2761.           * caller, int callerlen, GROUP FAR * g);
  2762.           
  2763.           ConditionFunc is a place holder for the
  2764.           application-supplied function name.  The actual
  2765.           condition function must reside in a DLL or
  2766.           application module and be exported in the module
  2767.           definition file.  You must use MakeProcInstance()
  2768.           to get a procedure-instance address for the
  2769.           callback function.  The exact format of the caller
  2770.           parameter is determined by the address family in
  2771.           which the communication is occurring.
  2772.           
  2773.           The result parameter g is assigned within the
  2774.           condition function to indicate the following
  2775.           actions:
  2776.                if g is an existing socket group id, add s to
  2777.           this group, provided all the requirements
  2778.            set by this group are met; or
  2779.  
  2780.           if g = SG_UNCONSTRAINED_GROUP, create an
  2781.                          unconstrained socket group and have
  2782.                          s as the first member; or
  2783.  
  2784.           if g = SG_CONSTRAINED_GROUP, create a constrained
  2785.                           socket group and have s as the first member; or
  2786.           
  2787.           if g = NULL, no group operation is performed.
  2788.  
  2789.           For unconstrained groups, any set of sockets may
  2790.           be grouped together as long as they are supported
  2791.           by a single Winsock Service Provider and are
  2792.           connection-oriented.  A constrained socket group
  2793.           requires that connections on all grouped sockets
  2794.           be to the same host.  For newly created socket
  2795.           groups, the new group id can be retrieved by using
  2796.           getsockopt() with option SO_GROUP_ID, if this
  2797.           connection operation completes successfully.
  2798.           
  2799.           The argument addr is a result parameter that is
  2800.           filled in with the address of the connecting
  2801.           entity, as known to the communications layer.  The
  2802.           exact format of the addr parameter is determined
  2803.           by the address family in which the communication
  2804.           is occurring.  The addrlen is a value-result
  2805.           parameter; it should initially contain the amount
  2806.           of space pointed to by addr; on return it will
  2807.           contain the actual length (in bytes) of the
  2808.           address returned.  This call is used with
  2809.           connection-oriented socket types such as
  2810.           SOCK_STREAM.  If addr and/or addrlen are equal to
  2811.           NULL, then no information about the remote address
  2812.           of the accepted socket is returned.
  2813.  
  2814.  
  2815. ????
  2816. ????
  2817. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Fri Feb 18
  2818. 13:55:06 1994
  2819. Date: Fri, 18 Feb 94 13:45:15 PST
  2820. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  2821. Message-ID: <940218134515_7@ccm.hf.intel.com>
  2822. To: martinh@jsbus.com
  2823. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  2824. Subject: Input for Winsock Ver 2
  2825. Status: OR
  2826.  
  2827.  
  2828. Text item: Text_1
  2829.  
  2830.                                                     02/18/94
  2831. Dear Martin,
  2832.  
  2833. Intel is pleased to supply the following input to the Winsock 2
  2834. definition process. There are 10 proposals in all, with this submittal
  2835. corresponding to proposal number 10. (Finally!)
  2836.  
  2837.  
  2838.  
  2839. Regards,
  2840.  
  2841. David B. Andersen
  2842. Intel Architecture Labs
  2843.  
  2844.  
  2845.  
  2846. Extension #10:
  2847.      Integration hooks for Windows Telephony
  2848.  
  2849. Description:
  2850. One of the primary benefits in extending Winsock to cover
  2851. multiple transports will be in providing a uniform and
  2852. consistent way to access to the data transport capabilities
  2853. of telephony connections, particularly high-bandwidth,
  2854. digital telephony.  In order to achieve this we believe it
  2855. is essential that Winsock work smoothly with the Windows
  2856. Telephony API (TAPI).  As both APIs are built upon the
  2857. Windows Open Systems Architecture (WOSA) foundation, we
  2858. assume at the outset that the best interworking will be
  2859. achieved when a single driver acts simultaneously as both a
  2860. Winsock and TAPI service provider.
  2861.  
  2862. There are several capabilities which are key to facilitating
  2863. this close interworking between call control and data
  2864. transmission.  Foremost among these is the ability for
  2865. applications to utilize telephony networks without needing
  2866. to be explicitly aware that they are doing so.  Winsock
  2867. should be able to accommodate this by providing a uniform
  2868. data transport abstraction that is common and consistent
  2869. across all supported networks.  Winsock service providers
  2870. should implement for telephony networks the multiplexing
  2871. capability that is expected and required on packet switched
  2872. networks.  Secondly, a method is needed to transition back
  2873. and forth between controlling a call with TAPI and
  2874. transmitting data with Winsock.  These capabilities can be
  2875. expressed by adding two additional socket options for
  2876. accessing underlying TAPI-specific identifiers.
  2877.  
  2878. Motivation:
  2879. Ever since the earliest days of SLIP and on into the present
  2880. with PPP, there has never been a standardized way to
  2881. establish an underlying telephone call.  When a protocol
  2882. such as TCP/IP or NetBIOS is to be run over a telephony
  2883. connection, the native addressing format of the protocol has
  2884. no way to include the required phone number.  In these
  2885. instances, the application will frequently need to establish
  2886. the connection itself prior to initiating data
  2887. communications.  The proper interface to use for this is
  2888. TAPI, since that is what it was made for.
  2889.  
  2890. Other  protocols are designed specifically for telephony
  2891. connections and their notion of address includes the phone
  2892. number.  When using such a protocol, the application need
  2893. not be concerned with pre-establishing the telephony
  2894. connection, as the service provider will have all of the
  2895. information needed to establish the connection itself.
  2896. However, even under these circumstances, we don't want to
  2897. preclude the application from being able to exercise control
  2898. over the underlying call.  Thus providing a way to go from a
  2899. Winsock data connection to the underlying TAPI call and back
  2900. again would be both powerful and useful.
  2901.  
  2902. Semantics:
  2903.  
  2904. Creating Winsock Sockets on an Existing Call
  2905.  
  2906. TAPI contains a function lineGetID that, given a line,
  2907. address, or call allows the app to find the companion
  2908. service-specific device name corresponding with the call.
  2909. For example, lineGetID can be invoked on an existing TAPI
  2910. call (using its handle) requesting the Winsock "device name"
  2911. corresponding to the given call.  If the TAPI provider does
  2912. not support Winsock , an error is returned.  Otherwise, a
  2913. Winsock "device name" is returned.
  2914.  
  2915.           #include "tapi.h"
  2916.           
  2917.           LPVARSTRING    lpDeviceID;
  2918.           HCALL          hCall;
  2919.           int                    Size_of_POTS;
  2920.           
  2921.           Size_of_POTS = sizeof(int) + sizeof(POTS_Address);
  2922.           lpDeviceID = Any-Memory-Allocation-Function (
  2923.                                         sizeof(VARSTRING) + Size_of_POTS );
  2924.           lpDeviceID->dwTotalSize = sizeof(VARSTRING) + Size_of_POTS;
  2925.           lineGetID( 0, 0, hCall,
  2926.           LINECALLSELECT_CALL,lpDeviceID, "Winsock");
  2927.  
  2928. What is actually returned in the VARSTRING struct pointed to
  2929. by the lpDeviceId parameter is the information that an
  2930. application using Winsock would need to create one or more
  2931. sockets over an existing phone call: namely a valid Winsock
  2932. address family and the remote address itself.  With this
  2933. information, the application can create a socket of the
  2934. desired type and request that a connection be established.
  2935.  
  2936.           #include "Winsock.h"
  2937.           
  2938.           SOCKET    s;
  2939.           void FAR *     lpDest_address;
  2940.           
  2941.           lpDest_address = lpDeviceID + lpDeviceID->dwStringOffset;
  2942.           s = socket( (int)*lpDest_address, SOCK_UNREL_ISOCH_STREAM, 0 );
  2943.           connect( s, lpDest_address, &Size_of_POTS );
  2944.           // Now, you can use Winsock as appropriate.
  2945.  
  2946. The underlying service provider will realize that a new call
  2947. does not need to be placed and simply create the required
  2948. data stream.
  2949.  
  2950.  
  2951. Transitioning a Call From Winsock to TAPI
  2952.  
  2953. In transitioning from a data transmission mode to a call
  2954. control mode, the application is strongly advised to first
  2955. use shutdown() to gracefully terminate the existing data
  2956. traffic without causing the underlying resources (i.e. the
  2957. phone call) to be released.  Once this is done the
  2958. application can retrieve the values of  PVD_CALL_ID which is
  2959. a "Call ID" assigned by the Service Provider (SP)
  2960. corresponding to the underlying call, and TAPI_DEVICE_ID
  2961. which is a TAPI device ID for the line over which the call
  2962. was placed.  Having obtained the information, the
  2963. application is then ready to invoke appropriate TAPI
  2964. functions in order to find the appropriate call handle as
  2965. follows and manipulate the call thereafter.
  2966.  
  2967.           #include "Winsock.h"
  2968.           #include "tapi.h"
  2969.           
  2970.           SOCKET    s;
  2971.           DWORD          dwCallID;      // Call ID defined by SP
  2972.           DWORD          dwDeviceID;    // TAPI line device ID
  2973.           LPHLINEAPI     lphLineApp;
  2974.           LPHLINE                lphLine;
  2975.           LPLINECALLLIST lpCallList;
  2976.           
  2977.           // A connection associated with socket s has been set up,
  2978.           // and some data may have been transferred over it using
  2979.           // Winsock.  Now, we would like to retrieve and  manipulate the
  2980.           // underlying TAPI call.
  2981.           
  2982.           shutdown( s, SD_BOTH );
  2983.           getsockopt( s, SOL_PROVIDER, PVD_CALL_ID, &dwCallID,
  2984. &sizeof(DWORD));
  2985.           getsockopt( s, SOL_PROVIDER, TAPI_DEVICE_ID, &dwDeviceID,
  2986.                                           &sizeof(DWORD));
  2987.           lineInitialize(lphLineApp, ... );
  2988.           lineOpen(*lphLineApp, dwDeviceID, lphLine, ... );
  2989.           // Here, allocate appropriate memory for the Call List
  2990.           // pointed to by lpCallList.
  2991.           lineGetNewCalls(*lphLine, 0, LINECALLSELECT_LINE, lpCallList);
  2992.           // Search for the list to find the matching hCall which has
  2993.           // the same "Call ID" (obtained by using lineGetID() with
  2994.           // "WINSOCK" device class, as shown above) as the dwCallID
  2995.           // returned from getsockopt() earlier.
  2996.           
  2997.           // Now, you can use TAPI to manipulate hCall as appropriate.
  2998.          
  2999.  
  3000. Transitioning a Call Back to Winsock from TAPI
  3001.  
  3002. If the application wishes to resume data communications on a
  3003. call that has been manipulated with TAPI, it is advisable to
  3004. assume that all existing sockets in the shutdown state are,
  3005. in some sense, broken.  Therefore, the application should
  3006. first use socket() to create replacement sockets, and then
  3007. use closesocket() to eliminate all sockets that were left in
  3008. the shutdown state.  Eliminating all of the old sockets
  3009. first is not wise as this will likely cause the underlying
  3010. phone call to be dropped.
  3011.  
  3012.           #include "Winsock.h"
  3013.           
  3014.           SOCKET        old_s, new_s;
  3015.           VOID FAR *     name;
  3016.           int FAR *              namelen;
  3017.           
  3018.           new_s = socket( AF_POTS, SOCK_UNREL_ISOCH_STREAM, 0 );
  3019.           getsockname( old_s, name, namelen );
  3020.           closesocket( old_s );
  3021.           bind( new_s, name, namelen);
  3022.           // Now, use lineGetID() to get the (maybe new) destination 
  3023.           // address, and reconnect using connect() as shown above
  3024.          
  3025.  
  3026. ????
  3027.                                                                              
  3028.   
  3029. -------------------------------------------------------------------------
  3030. Martin Hall                         108 Whispering Pines Drive, Suite 115
  3031. JSB Corporation                     Scotts Valley, California 95066
  3032. martinh@jsbus.com                   Tel: 408-438-8300   Fax: 408-438-8360
  3033.  
  3034. From: rcq
  3035. To: martinh
  3036. Cc: towfiq; davidtr
  3037. Subject: Windows Sockets 2 Contribution
  3038. Date: Sunday, March 06, 1994 7:22PM
  3039.  
  3040. Return-Path: <netmail!rcq@mailserv-D.ftp.com>
  3041. Date: Sun, 6 Mar 94 19:22:35 EST
  3042. Message-Id: <9403070022.AA18034@mailserv-D.ftp.com>
  3043. To: martinh@jsbus.com
  3044. Subject: Windows Sockets 2 Contribution
  3045. From: netmail!rcq@ftp.com  (Bob Quinn)
  3046. Reply-To: netmail!rcq@ftp.com
  3047. Cc: towfiq@sunsite.unc.edu, davidtr@microsoft.com
  3048. Sender: netmail!rcq@mailserv-D.ftp.com
  3049. Repository: mailserv-D.ftp.com, [message accepted at Sun Mar  6 19:22:11 1994]
  3050. Originating-Client: aeolus.ftp.com
  3051. Content-Length: 17903
  3052. ------------------------------------------------------------------------------
  3053. Gentlemen:
  3054.  
  3055. I apologize for this very late entry.  Unfortunately, the delay
  3056. couldn't be avoided.  I hope these suggestions can still be
  3057. considered.
  3058.  
  3059. I have forwarded this one file with all my suggestions to all three
  3060. of you.  And I forwarded individual messages for each of these
  3061. items to Martin, as he requested in his original solicitation.
  3062.  
  3063. Thanks for your consideration,
  3064. --
  3065.  Bob Quinn                                             rcq@ftp.com
  3066.  FTP Software, Inc.                                No. Andover, MA
  3067.  
  3068. Version 2.0 Windows Sockets suggested improvements
  3069. --------------------------------------------------
  3070. The following file contains numbered suggestions for Version 2.0
  3071. of the Windows Sockets specification in the format requested by 
  3072. Martin Hall (e.g. one line summary, followed by a single paragraph 
  3073. description).  The order in which they appear is arbitrary (i.e.
  3074. NOT related to their priority).
  3075. --
  3076. (1)Summary: Allow optional support of Windows Sockets extensions and
  3077.         add a new function to return bit flags to indicate which
  3078.         optional features a WinSock implementation supports.
  3079.  
  3080. Description:
  3081. The Windows Sockets API should use The Hosts Requirements RFC 1122
  3082. as a model for differentiating between required and optional features.
  3083. Since it is an API, not a protocol specification, the WinSock spec
  3084. can go one step further to provide a mechanism for reporting on the
  3085. optional features supported (e.g. a function GetWinsockExtensions()
  3086. that returns a pointer to bitflags defined by the Windows Sockets 
  3087. specification to denote different extensions).
  3088.  
  3089. --
  3090. (2) Summary: Add ability to support larger IP address space as needed
  3091.         by Simple Internet Protocol (IPng contender).
  3092.  
  3093. Description:
  3094. SIPP is one of the contenders the IETF is considering for IP "Next
  3095. Generation" (IPng).  "In order to implement the Simple Internet 
  3096. Protocol (SIPP) [Deering, ietf-draft, Nov'92] in an operating system 
  3097. based on 4.x BSD, changes must be made to some of the application 
  3098. program interfaces (APIs)...This paper presents a first attempt to 
  3099. define the API changes needed to support SIPP in BSD systems."  The
  3100. primary change the API must deal with is an increase in the size of
  3101. an IP address from 4-bytes to 8-bytes.
  3102.  
  3103.   from SIPP API Specification (draft-ietf-sip-bsd-api-01.txt)
  3104.   12/20/93 by Richard E. Gilligan (bob.gilligan@eng.sun.com)
  3105.  
  3106. Summary of new additions:
  3107. -------------------------
  3108. /* Simple Internet Protocol Address Form in use (NOT a socket type) */
  3109.     #define AF_SIPP     24
  3110.  
  3111. /* If AF_SIFF, sockaddr_in fields are redefined by macros */
  3112.         #define sipp_addr       sin_zero
  3113.         #define sipp_zero       sin_addr
  3114.  
  3115. /* sockets passed between processes use setsockopt() to set addr form */
  3116.         #define SIPP_ADDRFORM   0x16
  3117.  
  3118. /* setsockopt() to set flow ID in SIPP packets sent (cannot getsockopt()
  3119.     on received SIPP packets, however) */
  3120.         #define SIPP_FLOWID     0x15
  3121.  
  3122. /* new gethostbyname() equivalent for SIPP addresses */
  3123.         struct hostent *hostname2addr(const char *name, int af,
  3124.                                         char *buf, int buflen);
  3125.  
  3126. /* new ascii2addr() and addr2ascii() for SIPP address input/output */
  3127.         int ascii2addr(long af, char *cp, char *ap);
  3128.         char *addr2ascii(long af, char *ap, char *buf, int buflen);
  3129.  
  3130. --
  3131. (3) Summary: Allow retrieval of local IP address without using name
  3132.         resolution.
  3133.  
  3134. Description:
  3135. Allow support for the BSD gethostid() function, as well as the
  3136. SIOCGIFADDR option for the ioctlsocket() function.  For multi-homed
  3137. stacks, SIOCSIFADDR should also be allowed (to set local IP address).
  3138.  
  3139. --
  3140. (4) Summary: Provide access to the broadcast address.
  3141.  
  3142. Description:
  3143. Define support for the ioctlsocket() options SIOCGIFBRDADDR and 
  3144. SIOCSIFBRDADDR to get and set the IP Broadcast address.
  3145.  
  3146. --
  3147. (5) Summary:  Provide the Address Resolution Protocol (ARP) table.
  3148.  
  3149. Description:
  3150. Allow support for the SIOCGARP, SIOCSARP and SIOCDARP ioctlsocket()
  3151. options to get, set and delete entries in the TCP/IP protocol stack's 
  3152. ARP table. 
  3153.  
  3154. --
  3155. (6) Summary: Allow all low-level interface ioctlsocket() options to
  3156.         provide full control to an application on multi-homed hosts.
  3157.  
  3158. Description:
  3159. The following ioctlsocket() options should be (optionally) supported:
  3160.   - SIOCGIFADDR and SIOCSIFADDR ioctlsocket() options to get and set
  3161.      the interface address.
  3162.   - SIOCGIFDSTADDR and SIOCSIFDSTADDR to get and set point-to-point 
  3163.      interface address.
  3164.   - SIOCGIFFLAGS and SIOCSIFFLAGS to get and set interface flags 
  3165.      (which indicate, for example, if the interface is point-to-point, 
  3166.      supports broadcast addressing, whether the interface is running...
  3167.   - SIOCGIFCONF to get the interface configuration list containing one
  3168.      ifreq structure (a la BSD) for every interface available.
  3169.   - SIOCGIFMETRIC and SIOCSIFMETRIC to get and set the routing metrics
  3170.      (the kernel routing tables).
  3171.  
  3172. --
  3173. (7) Summary: Allow direct manipulation of the TCP Window.
  3174.  
  3175. Description:
  3176. Define (optional) support of the following:
  3177.   - SIOCGHIWAT and SIOCSHIWAT ioctlsocket() options to get and set 
  3178.      the TCP Window High Water mark.
  3179.   - SIOCGLOWAT and SIOCSLOWAT ioctlsocket() options to get and set
  3180.      the TCP Window Low Water mark.
  3181.   - SO_RCVLOWAT and SO_SNDLOWAT setsockopt() options to get and set
  3182.      the send and recieve low water marks.
  3183.  
  3184. --
  3185. (8) Summary: Define support for multicast using explicit binding (with
  3186.         the bind() function).
  3187.  
  3188. Description:
  3189. Any UDP Socket can send a datagram to a multicast address, but to
  3190. receive a multicast packet the socket must be (explicitly) bound to
  3191. the multicast address.  The underlying stack should do the right
  3192. thing to register the multicast address (e.g. using IGMP according
  3193. to Hosts Requirements RFC1122).
  3194.  
  3195. --
  3196. (9) Summary: Define a mechanism that would optionally prevent re-
  3197.         entrant messages to an application while a function (blocking
  3198.         or non-blocking) is pending.
  3199.  
  3200. Description:
  3201. Currently there is no blocking hook strategy that will prevent
  3202. reentrant messages to a calling application and work with all Windows
  3203. Sockets implementations available.  Since there are many applications 
  3204. and DLLs in existence that need network access but cannot be rewritten 
  3205. to handle reentrant messages, a caller should not be required to handle 
  3206. re-entrant messages while a network operation is pending.  A blocking
  3207. hook function that prevents reentrant messages should be possible on
  3208. all WinSock DLL implementations.
  3209.  
  3210. --
  3211. (10) Summary: As long as every process registers with a Winsock DLL,
  3212.         it should be able to access the sockets of another process.
  3213.  
  3214. Description:
  3215. Optional socket sharing between tasks can be implemented in one of two
  3216. ways: explicit or implicit.  Implicit sharing would allow any taskt that
  3217. calls WSAStartup() to to use any socket available.  Explicit sharing (as
  3218. in OS/2) would require a task to call ExportSocket(s) to make a socket
  3219. sharable and any task that wanted to use exported sockets would need to
  3220. call ImportSocket().  Either method is sufficient and necessary to
  3221. facilitate creation of many intermediate API's ("middleware") and master
  3222. server applications (that spawn other server applications, e.g. inetd).
  3223.  
  3224. In addition, this new socket sharing ability will require new function
  3225. definitions to provide information on a per socket basis.  Specifically:
  3226.    - WSAGetLastSocketError() to get the last error for an individual
  3227.       socket (whereas WSAGetLastError() is task-based).
  3228.    - WSAIsSocketBlocking() to determine if an individual socket has
  3229.       a blocking operation pending.
  3230.    - WSACancelSocketBlocking() to cancel an individual blocking socket.
  3231. Another possible strategy might be to leave the current two functions
  3232. and add a setsockopt() option to select a particular socket for these
  3233. functions to report on.
  3234.  
  3235. The task that creates a socket "owns" the socket.  When that task calls
  3236. WSACleanup() the WinSock DLL should destroy the socket, whether or not 
  3237. the application called closesocket().  Subsequent calls by other tasks
  3238. that reference that socket should fail with WSAENOTSOCK.
  3239.  
  3240. --
  3241. (11) Summary: Action of the WinSock DLL and underlying stack after a
  3242.         non-blocking closesocket() call needs clarification.
  3243.  
  3244. Description:
  3245. When an application calls closesocket() with a non-blocking socket:
  3246.   - a WinSock DLL should also fail with WSAEWOULDBLOCK on a non-
  3247.      blocking socket without SO_LINGER set (currently the specification
  3248.      only says it should with a non-zero SO_LINGER setting)
  3249.   - the specification should determine a default timeout for closing 
  3250.      a socket (e.g. a default time period after which the WinSock DLL 
  3251.      or underlying stack assumes the other end is not going to respond 
  3252.      to the TCP <FIN>, sends a <RST> and releases resources.  
  3253.   - the specification should also specify whether an application should 
  3254.      call closesocket() a second time after it returns a WSAEWOULDBLOCK 
  3255.      error, or use some other means to determine the state of the socket
  3256.      (e.g. select() or asynch message).
  3257.   - the specification should determine whether an application should
  3258.      call WSACleanup() immediately upon return from a closesocket()
  3259.      call that fails with WSACleanup, and describe the action of
  3260.      WSACleanup() when this happens (i.e. reset the connection).
  3261.  
  3262. --
  3263. (12) Summary: Define standard database format, locations, and mechanisms 
  3264.         for finding and setting them.
  3265.  
  3266. Description:
  3267. WinSock DLLs should have their (standard BSD format) database files in 
  3268. a well-known location, there should be a mechanism for locating them
  3269. (e.g. getservent(), gethostent(), getprotoent() functions) and setting 
  3270. them (setservent(), sethostent(), setprotoent() functions).  This would 
  3271. have the added benefit of allowing sequential search of the file(s) by 
  3272. an application (creating a function to do so is unnecessary).
  3273.  
  3274. --
  3275. (13) Summary: Define the C++ Class Library for Windows Sockets
  3276.  
  3277. Description:
  3278. The Windows Sockets API should have a standard class library defined 
  3279. that takes advantages of OOP encapsulation features with some
  3280. specialized classes that make programming to the specification easier
  3281. (e.g. TCP server, TCP client, etcetera).
  3282.  
  3283. --
  3284. (14) Summmary: Define the standard Error Text for WinSock errors
  3285.  
  3286. Description:
  3287. Use the BSD 4.3 descriptions for analogous errors in English.  Provide
  3288. the source code for one possible function that uses string resources
  3289. to translate error numbers into text, but put the onus on the applica-
  3290. tion developer to implement the function and provide the text (so they
  3291. can translate into other languages if they want to).
  3292.  
  3293. --
  3294. (15) Summary: Statements needed on some issues
  3295.  
  3296. Description:
  3297. The specification should make statements to clarify the assumptions
  3298. an application developer can make in regards to:
  3299.     - assuming a socket is equivalent to a file descriptor
  3300.     - socket sharing between processes
  3301.     - database file (host table, protocol and services file) 
  3302.        format and location
  3303.     - name resolution protocols used
  3304.     - support of the Unix Domain, the loopback addresses, and
  3305.        recommendations for local interprocess communication in 
  3306.        Windows
  3307.     - recommended ways to retrieve local username.
  3308.     - caution application developers not to do more than one recv()
  3309.        call in their FD_READ message handler (a common mistake).
  3310.        
  3311. --
  3312. (16) Summary: Define support for protocols other than TCP/IP
  3313.  
  3314. Description:
  3315. At a minimum, describe support for NetBEUI, IPX/SPX and Appletalk.
  3316.  
  3317. --
  3318. (17) Summary: Define a standard debugging paradigm
  3319.  
  3320. Description:
  3321. Current support of setsockopt(SO_DEBUG) option is spotty at best,
  3322. and undefined (so it differs between winsock implementations).  The
  3323. specification should make recommendations on the mechanism to use
  3324. for output and the format of the output.  The Windows Debug device
  3325. is an obvious candidate, though it is very crude since it doesn't
  3326. provide a means of filtering output and can be overloaded.  Defining 
  3327. a DDE or OLE interface would be more elegant and useful.
  3328.  
  3329. --
  3330. (18) Summary: Define a mechanism for handling multiple Winsock DLL's
  3331.         simultaneously.
  3332.         
  3333. Description:
  3334. With the support of protocol suites in addition to TCP/IP, users are
  3335. likely to need more than one WinSock DLL in use simultaneously.  The
  3336. Windows Sockets specification must define a mechanism for multiplexing 
  3337. co-resident Windows Sockets API's.  Microsoft's Service Provider
  3338. Interface (SPI) seems a likely candidate.
  3339.  
  3340. --
  3341. (19) Summary: Define a standard mechanism for determining the version
  3342.          of the WinSock DLL implementation itself
  3343.  
  3344. Description: 
  3345. Require the use of the standard Version Resource or add a field to 
  3346. WSAData so a program can retrieve a numeric version description in a 
  3347. standard way.
  3348.  
  3349. --
  3350. (20) Summary: Define a mechanism to allow access to the subnet mask.
  3351.  
  3352. Description:
  3353. Define the use of the ioctlsocket() options SIOCGIFNETMASK and
  3354. SIOCSIFNETMASK to get and set the IP subnet address mask.
  3355.  
  3356. --
  3357. (21) Summary: Provide a mechanism to allow access to the IP routing.
  3358.  
  3359. Description:
  3360. Define the use of the ioctlsocket() options SIOCADDRT and SIODELRT 
  3361. to add and delete an IP route.
  3362.  
  3363. --
  3364. (22) Summary: Provide for asymmetric send and receive Maximum UDP
  3365.         datagram sizes.
  3366.  
  3367. Description:
  3368. Currently there is only one iMaxUdpDg (maximum UDP Datagram size) in
  3369. the WSAData structure returned by WSAStartup().  Since outgoing 
  3370. datagrams do not make large buffer demands, but incoming oversized 
  3371. datagrams do, some TCP/IP protocol stacks can send oversized Datagrams 
  3372. but cannot receive them.  Just as there is symmetry with send and
  3373. receive buffer sizes (SO_SEND and SO_RECV options for setsockopt),
  3374. there should be symmetry for iMaxUdpDg to differentiate the max UDP
  3375. datagram sizes that an application can send and receive.
  3376.  
  3377. --
  3378. (23) Summary: Provide a mechanism to set the Time-to-Live field in
  3379.         an IP packet.
  3380.  
  3381. Description:
  3382. In BSD the only way to get at the IP Time-To-Live (TTL) field is to 
  3383. request a SOCK_RAW socket for IPPROTO_IP, and create the IP header in 
  3384. it's entirety.  Since many TCP/IP stacks cannot provide this service 
  3385. and because it invites disaster, this is not ideal.  Setting the TTL
  3386. is very useful for providing a simple mechanism to do the typical
  3387. (UDP or ICMP) traceroute function. The spec should define a simple 
  3388. mechanism such as a SO_TTL option for setsockopt() that would allow
  3389. setting the TTL without wreaking havoc.
  3390.  
  3391. --
  3392. (24) Summary: Provide a mechanism to get a "privileged port"
  3393.  
  3394. Description:
  3395. Provide the function rresvport(), to return a port number between
  3396. 512 and 1024.
  3397.  
  3398. --
  3399. (25) Summary: Provide API support for gather reads and scatter writes.
  3400.  
  3401. Description:
  3402. Provide (equivalents for) the functions readv() and writev().
  3403.  
  3404. --
  3405. (26) Summary: Provide a symmetrical function to gethostname() to allow
  3406.         setting a local hostname.
  3407.  
  3408. Description:
  3409. Define a new function sethostname().
  3410.  
  3411. --
  3412. (27) Summary: Define a mechanism to retrieve network statistics
  3413.  
  3414. Description:
  3415. There are many times when an application needs access to network stack 
  3416. statistics (such as when implementing an network management station, 
  3417. for example).  There should be a function that provide statistics akin
  3418. to those returned by BSD netstat.  This function could return a pointer
  3419. to a network domain specific statistics structure that had counts of
  3420. protocol packets in/out, error counts, etcetera.  
  3421.  
  3422. --
  3423. (28) Summary: Define how the Windows Sockets API expects the TCP/IP
  3424.         stack to implement out of band data (urgent data).
  3425.  
  3426. Description:
  3427. Describe the fact that OOB data is *not* truly "out of band" (i.e.
  3428. that it cannot be retrieved until all data previous to it has
  3429. been processed).   The reason for this limitation is that a TCP urgent
  3430. pointer can point ahead to data that the stack hasn't received yet.
  3431. The specification should provide the semantics --preferably as an 
  3432. example--of how OOB should be used when "in-line" and not.
  3433.  
  3434. --
  3435. (29) Summary: Each function should have a simple sample to show how
  3436.         to use it. 
  3437.  
  3438. Description:
  3439. A sample is worth a thousand words.  Many functions warrant more 
  3440. than one example to show the different ways to use a them, but
  3441. the samples don't need to cover all possible variations (just some
  3442. of the common ones, and particularly those that cause confusion).
  3443.  
  3444. --
  3445. (30) Summary: Provide a mechanism for setting the TCP push bit.
  3446.  
  3447. Description: 
  3448. Add an option flag for send() that allows setting the TCP push bit
  3449. since some TCP/IP stacks require receipt of a TCP segment with the
  3450. push bit set before data will be made available to the application.
  3451. Another possibility is to adopt the flush() function used in BSD.
  3452. NOTE: This is not related to the TCP_NODELAY setsockopt() option
  3453. which overrides the Nagle algorithm.
  3454.  
  3455. --
  3456. (31) Summary: Add an option to turn off UDP checksumming
  3457.  
  3458. Description:
  3459. Many new applications are doing transmission of multi-media (e.g.
  3460. video and audio) and typically they use UDP.  Some applications may
  3461. be tolerant of errors in the data received and might prefer to
  3462. receive damaged data over the alternative of not receiving the data
  3463. at all.  Adding a setsockopt() option to disable UDP checksumming
  3464. (which is optional as per The hosts requirements RFC1122), would
  3465. allow this possibility.
  3466.  
  3467. --
  3468. (32) Summary: When an FD_READ message contains an error, don't
  3469.         require the application to call the notification reenabling
  3470.         function (recv() or recvfrom()).
  3471.  
  3472. Description:
  3473. One very common error in Windows Sockets application programming is
  3474. not to call recv() or recvfrom() when an error is passed in an FD_READ
  3475. message.  Subsequently, the WinSock DLL will not send anymore FD_READ 
  3476. messages, though there may in fact be data pending.  Since errors are
  3477. infrequent, it should not cause problems if the FD_READ event is "edge
  3478. triggered" for messages containing errors.  In other words, after a
  3479. WinSock DLL sends an FD_READ message containing an error, it should 
  3480. post subsequent FD_READ messages even if the application hasn't called 
  3481. either recv() or recvfrom() (the "notification re-enabling functions").
  3482.  
  3483. --
  3484. (33) Summary: SOCK_RAW useage should be defined.
  3485.  
  3486. Description:
  3487. At a minimum, the use of SOCK_RAW for IPPROTO_ICMP should be defined.
  3488.  
  3489.  
  3490.